private Triangle_dt extendInside(Triangle_dt t, Point_dt p) { Triangle_dt h1 = default(Triangle_dt); Triangle_dt h2 = default(Triangle_dt); h1 = treatDegeneracyInside(t, p); if ((h1 != null)) { return(h1); } h1 = new Triangle_dt(t.c, t.a, p); h2 = new Triangle_dt(t.b, t.c, p); t.c = p; t.circumcircle(); h1.abnext = t.canext; h1.bcnext = t; h1.canext = h2; h2.abnext = t.bcnext; h2.bcnext = h1; h2.canext = t; h1.abnext.switchneighbors(t, h1); h2.abnext.switchneighbors(t, h2); t.bcnext = h2; t.canext = h1; return(t); }
private void Flip(Triangle_dt t, int mc) { Triangle_dt u = t.abnext; Triangle_dt v = default(Triangle_dt); t.mc = mc; if ((u.isHalfplane | (!(u.circumcircle_contains(t.c))))) { return; } if ((t.a.Equals(u.a))) { v = new Triangle_dt(u.b, t.b, t.c); v.abnext = u.bcnext; t.abnext = u.abnext; } else if ((t.a.Equals(u.b))) { v = new Triangle_dt(u.c, t.b, t.c); v.abnext = u.canext; t.abnext = u.bcnext; } else if ((t.a.Equals(u.c))) { v = new Triangle_dt(u.a, t.b, t.c); v.abnext = u.abnext; t.abnext = u.canext; } else { throw new Exception("Error in flip."); } v.mc = mc; v.bcnext = t.bcnext; v.abnext.switchneighbors(u, v); v.bcnext.switchneighbors(t, v); t.bcnext = v; v.canext = t; t.b = v.a; t.abnext.switchneighbors(u, t); t.circumcircle(); currT = v; Flip(t, mc); Flip(v, mc); }
private Triangle_dt extendclock(Triangle_dt t, Point_dt p) { t.isHalfplane = false; t.c = p; t.circumcircle(); Triangle_dt tbc = t.bcnext; if ((p.pointLineTest(tbc.a, tbc.b) >= Point_dt.RIGHT)) { Triangle_dt nT = new Triangle_dt(p, t.b); nT.abnext = t; t.bcnext = nT; nT.bcnext = tbc; tbc.canext = nT; return(nT); } return(extendclock(tbc, p)); }
private Triangle_dt extendcounterclock(Triangle_dt t, Point_dt p) { t.isHalfplane = false; t.c = p; t.circumcircle(); Triangle_dt tca = t.canext; if ((p.pointLineTest(tca.a, tca.b) >= Point_dt.RIGHT)) { Triangle_dt nT = new Triangle_dt(t.a, p); nT.abnext = t; t.canext = nT; nT.canext = tca; tca.bcnext = nT; return(nT); } return(extendcounterclock(tca, p)); }