示例#1
0
        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);
        }
示例#2
0
        void TestThatFrontIsConnected()
        {
            CdtFrontElement p = null;

            foreach (var cdtFrontElement in front)
            {
                if (p != null)
                {
                    Debug.Assert(p.RightSite == cdtFrontElement.LeftSite);
                }
                p = cdtFrontElement;
            }
        }
示例#3
0
 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;
   }