Example #1
0
        public void AddRegion(VoronoiRegion <Vertex2> region)
        {
            PolygonRegionIndex ri = new PolygonRegionIndex();
            PolygonRegion      r  = new PolygonRegion();

            //添加多边形顶点,计算多边形中心点
            Vector3 center = Vector3.zero;

            foreach (var c in region.Cells)
            {
                var z        = na.NoiseValue(c.CircumCenter.X, c.CircumCenter.Y);
                var tmpPoint = new Vector3(c.CircumCenter.X, c.CircumCenter.Y, z);
                var p        = Contain(tmpPoint);
                center += p;
                r.Vertexs.Add(p);
                if (!vertexs.Contains(p))
                {
                    vertexs.Add(p);
                }
            }

            r.position = center / region.Cells.Count;
            ri.center  = center / region.Cells.Count;

            //添加多边形边
            foreach (var e in region.Edges)
            {
                var pA   = Contain(new Vector3(e.From.CircumCenter.X, e.From.CircumCenter.Y));
                var pB   = Contain(new Vector3(e.To.CircumCenter.X, e.To.CircumCenter.Y));
                var edge = Contain(new PolygonEdge(pA, pB));
                r.Edges.Add(edge);
                if (!edges.Contains(edge))
                {
                    edges.Add(edge);
                }
            }

            foreach (var e in region.Edges)
            {
                var pA    = ContainVertexIndex(new Vector3(e.From.CircumCenter.X, e.From.CircumCenter.Y));
                var pB    = ContainVertexIndex(new Vector3(e.To.CircumCenter.X, e.To.CircumCenter.Y));
                var edge  = new PolygonEdgeIndex(pA, pB);
                var index = Contain(edge);
                if (index == -1)
                {
                    edgesIndex.Add(edge);
                    index = edgesIndex.Count - 1;
                }
                ri.EdgesIndex.Add(index);
            }

            regions.Add(r);
            regionsIndex.Add(ri);
        }
Example #2
0
 int Contain(PolygonEdgeIndex edge)
 {
     for (int i = 0; i < edgesIndex.Count; i++)
     {
         if (edge == edgesIndex[i])
         {
             return(i);
         }
     }
     return(-1);
 }