示例#1
0
        internal List <VtPolygon> CalcVoronoy()
        {
            var result = new List <VtPolygon>();

            for (int i = 0; i < Points.Count; i++)
            //for (int i = 0; i < 1; i++)
            {
                var pt   = Points[i];
                var poly = new VtPolygon();
                List <VtTriangle> trs = GetTriangles(Triangles, pt);
                VtTriangle        fTr = trs[0];
                VtTriangle        sTr = GetNeighbor(fTr, trs);
                poly.Edges.Add(new VtEdge(fTr.CirC, sTr.CirC));
                for (int j = 2; j < trs.Count + 1; j++)
                {
                    VtTriangle tTr = GetNeighbor(fTr, sTr, trs);
                    poly.Edges.Add(new VtEdge(sTr.CirC, tTr.CirC));
                    fTr = sTr;
                    sTr = tTr;
                }
                //poly.Edges.Add(new VEdge(poly.Edges.Last().E, poly.Edges.Last().S));
                result.Add(poly);
            }
            return(result);
        }
示例#2
0
        internal List <VtTriangle> CalcDelanua(float border = 10)
        {
            // Bound box
            MinX = Points.Min(point => point.X);
            MinY = Points.Min(point => point.Y);
            MaxX = Points.Max(point => point.X);
            MaxY = Points.Max(point => point.Y);

            Triangles = new List <VtTriangle>();

            var triangle = new VtTriangle(
                new VtPoint(MinX - border, MinY - border),
                new VtPoint(MinX - border, MaxY + border),
                new VtPoint(MaxX + border, MinY - border)
                );

            Triangles.Add(triangle);
            triangle = new VtTriangle(
                new VtPoint(MinX - border, MaxY + border),
                new VtPoint(MaxX + border, MinY - border),
                new VtPoint(MaxX + border, MaxY + border)
                );
            Triangles.Add(triangle);

            for (int i = 0; i < Points.Count; i++)
            {
                var pt = Points[i];
                DelanuaStep(ref Triangles, pt);
            }
            return(Triangles);
        }
示例#3
0
 public static VtTriangle GetNeighbor(VtTriangle fTri, VtTriangle sTri, List <VtTriangle> tries)
 {
     for (int i = 0; i < tries.Count; i++)
     {
         var tri = tries[i];
         // same - skip
         if (fTri == tri || sTri == tri)
         {
             continue;
         }
         if (sTri.HaveSameEdge(tri))
         {
             return(tri);
         }
     }
     return(null);
 }