SharpNav.PolyMesh.InCone C# (CSharp) Method

InCone() public static method

True if and only if diagonal (i, j) is strictly internal to polygon in neighborhood of i endpoint.
public static InCone ( int i, int j, PolyVertex verts, int indices ) : bool
i int Vertex index i
j int Vertex index j
verts PolyVertex Contour vertices
indices int PolyMesh indices
return bool
        public static bool InCone(int i, int j, PolyVertex[] verts, int[] indices)
        {
            int pi = RemoveDiagonalFlag(indices[i]);
            int pj = RemoveDiagonalFlag(indices[j]);
            int pi1 = RemoveDiagonalFlag(indices[Next(i, verts.Length)]);
            int pin1 = RemoveDiagonalFlag(indices[Prev(i, verts.Length)]);

            //if P[i] is convex vertex (i + 1 left or on (i - 1, i))
            if (PolyVertex.IsLeftOn(ref verts[pin1], ref verts[pi], ref verts[pi1]))
                return PolyVertex.IsLeft(ref verts[pi], ref verts[pj], ref verts[pin1]) && PolyVertex.IsLeft(ref verts[pj], ref verts[pi], ref verts[pi1]);

            //assume (i - 1, i, i + 1) not collinear
            return !(PolyVertex.IsLeftOn(ref verts[pi], ref verts[pj], ref verts[pi1]) && PolyVertex.IsLeftOn(ref verts[pj], ref verts[pi], ref verts[pin1]));
        }