static bool DropsSharpEnoughToTheRight(CdtFrontElement frontElement) { var edge = frontElement.Edge; if (frontElement.LeftSite != edge.upperSite) { return(false); } var d = edge.lowerSite.Point - edge.upperSite.Point; Debug.Assert(d.X > 0 && d.Y <= 0); return(d.X <= -0.5 * d.Y); }
void TestThatFrontIsConnected() { CdtFrontElement p = null; foreach (var cdtFrontElement in front) { if (p != null) { Debug.Assert(p.RightSite == cdtFrontElement.LeftSite); } p = cdtFrontElement; } }
void InsertAndLegalizeTriangle(CdtSite pi, CdtFrontElement frontElement) { if (Point.GetTriangleOrientationWithNoEpsilon(pi.Point, frontElement.LeftSite.Point, frontElement.RightSite.Point) != TriangleOrientation.Collinear) { var tr = new CdtTriangle(pi, frontElement.Edge, createEdgeDelegate); Triangles.Insert(tr); LegalizeEdge(pi, tr.Edges[0]); } else //we need to split the triangle below the element in to two triangles and legalize the old edges //we also delete, that is forget, the frontElement.Edge { var e = frontElement.Edge; e.upperSite.Edges.Remove(e); var t = e.CcwTriangle ?? e.CwTriangle; var oppositeSite = t.OppositeSite(e); RemoveTriangleButLeaveEdges(triangles, t); t = new CdtTriangle(frontElement.LeftSite, oppositeSite, pi, createEdgeDelegate); var t1 = new CdtTriangle(frontElement.RightSite, oppositeSite, pi, createEdgeDelegate); triangles.Insert(t); triangles.Insert(t1); LegalizeEdge(pi, t.OppositeEdge(pi)); LegalizeEdge(pi, t1.OppositeEdge(pi)); } }
void InsertAndLegalizeTriangle(CdtSite pi, CdtFrontElement frontElement) { if (Point.GetTriangleOrientationWithNoEpsilon(pi.Point, frontElement.LeftSite.Point, frontElement.RightSite.Point) != TriangleOrientation.Collinear) { var tr = new CdtTriangle(pi, frontElement.Edge, createEdgeDelegate); Triangles.Insert(tr); LegalizeEdge(pi, tr.Edges[0]); } else { //we need to split the triangle below the element in to two triangles and legalize the old edges //we also delete, that is forget, the frontElement.Edge var e = frontElement.Edge; e.upperSite.Edges.Remove(e); var t=e.CcwTriangle??e.CwTriangle; var oppositeSite = t.OppositeSite(e); RemoveTriangleButLeaveEdges(triangles, t); t=new CdtTriangle(frontElement.LeftSite, oppositeSite, pi, createEdgeDelegate); var t1 = new CdtTriangle(frontElement.RightSite, oppositeSite, pi, createEdgeDelegate); triangles.Insert(t); triangles.Insert(t1); LegalizeEdge(pi, t.OppositeEdge(pi)); LegalizeEdge(pi,t1.OppositeEdge(pi)); } }
static bool DropsSharpEnoughToTheRight(CdtFrontElement frontElement) { var edge = frontElement.Edge; if(frontElement.LeftSite!=edge.upperSite) return false; var d=edge.lowerSite.Point-edge.upperSite.Point; Debug.Assert(d.X > 0 && d.Y <= 0); return d.X <= -0.5 * d.Y; }