/// <summary> /// Is the point to the left of the edge? /// </summary> bool ToTheLeft(int pi, int li0, int li1) { if (li0 == -2) { return(Higher(li1, pi)); } else if (li0 == -1) { return(Higher(pi, li1)); } else if (li1 == -2) { return(Higher(pi, li0)); } else if (li1 == -1) { return(Higher(li0, pi)); } else { return(Geom.ToTheLeft(verts[pi], verts[li0], verts[li1])); } }
/// <summary> /// Is the edge legal, or does it need to be flipped? /// </summary> bool LegalEdge(int k, int l, int i, int j) { var lMagic = l < 0; var iMagic = i < 0; var jMagic = j < 0; if (lMagic) { return(true); } else if (iMagic) { var p = verts[l]; var l0 = verts[k]; var l1 = verts[j]; return(Geom.ToTheLeft(p, l0, l1)); } else if (jMagic) { var p = verts[l]; var l0 = verts[k]; var l1 = verts[i]; return(!Geom.ToTheLeft(p, l0, l1)); } else { var p = verts[l]; var c0 = verts[k]; var c1 = verts[i]; var c2 = verts[j]; return(!Geom.InsideCircumcircle(p, c0, c1, c2)); } }