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]));
}