i'm trying calculate surface normal of 2d polygon. using newell's method opengl wiki calculate surface normal. https://www.opengl.org/wiki/calculating_a_surface_normal understanding normal should in y direction returns [0, 0, 0]. y value gets changed -1 on second iteration , 0 on fourth iteration. p = [[0, 0, 0] [1, 0, 0] [0, 0, 1] [1, 0, 1]] function calcnormal(p) { var normal = [0, 0, 0]; for(var = 0; < p.length; i++) { var j = (i + 1) % (p.length); normal[0] += (p[i][1] - p[j][1]) * (p[i][2] + p[j][2]); normal[1] += (p[i][2] - p[j][2]) * (p[i][0] + p[j][0]); normal[2] += (p[i][0] - p[j][0]) * (p[i][1] + p[j][1]); } return normal; } you're using degenerate polygon testing. if draw in xz-plane, vertices numbered 0 3, looks this: 2 ---- 3 \ / \ / \/ /\ / \ / \ 0 ---- 1 this polygon not have defined normal, since changes orientation in middle, , folds on itself. i...