Ejemplo n.º 1
0
    public List <Vector3> Improve(IEnumerable <Vector3> src)
    {
        voronoi = new VoronoiMesh2();
        List <Vertex2> vertexs = new List <Vertex2>();

        foreach (var v in src)
        {
            vertexs.Add(new Vertex2(v.x, v.y));
        }
        voronoi.Generate(vertexs);
        Debug.Log("Voronoi:" + voronoi.Cells.Count + " Regions:" + voronoi.Regions.Count);
        List <Vector3> tmp = new List <Vector3>();

        foreach (var v in voronoi.Regions)
        {
            Vector2 vcenter = new Vector2();

            foreach (var e in v.Cells)
            {
                vcenter.x += e.CircumCenter.X;
                vcenter.y += e.CircumCenter.Y;
            }
            vcenter = vcenter / v.Cells.Count;
            if (size.Contains(vcenter))
            {
                tmp.Add(vcenter);
            }
        }
        return(tmp);
    }
Ejemplo n.º 2
0
    void GenerateVoronoi()
    {
        float start = Time.realtimeSinceStartup;

        voronoi = new VoronoiMesh2();
        List <Vertex2> vertices = new List <Vertex2>();

        foreach (var neighbour in neighbours)
        {
            if (neighbour != null && neighbour.frontier != null)
            {
                foreach (var point in neighbour.points)
                {
                    if (bounds.Contains(point))
                    {
                        points.Add(point);
                    }
                }
            }
        }
        foreach (var point in points)
        {
            vertices.Add(new Vertex2(point.x, point.z));
        }

        voronoi.Generate(vertices);
        float end = Time.realtimeSinceStartup;

        Debug.Log("> Voronoi time:" + (end - start) + "ms");
    }
Ejemplo n.º 3
0
    void TranslateToUnity(VoronoiMesh2 voronoi)
    {
        regions = new List <GraphLinked.Cell>();
        //deflatedCells = new List<Cell>();
        frontier = new List <Vector3>();
        foreach (VoronoiRegion <Vertex2> region in voronoi.Regions)
        {
            float margin = Random.Range(0.1f, 0.5f);
            bool  valid  = true;
            foreach (DelaunayCell <Vertex2> ce in region.Cells)
            {
                if (!bounds.Contains(new Vector3(ce.CircumCenter.X, 0, ce.CircumCenter.Y)))
                {
                    valid = false;
                    break;
                }
            }
            if (!valid)
            {
                foreach (DelaunayCell <Vertex2> ce in region.Cells)
                {
                    //invalid.Add(new Vector3(ce.CircumCenter.X, 0, ce.CircumCenter.Y));
                    foreach (var si in ce.Simplex.Vertices)
                    {
                        frontier.Add(new Vector3(si.X, 0, si.Y));
                    }
                }
                continue;
            }
            Vector3 centroid = Vector3.zero;
            IList <VoronoiEdge <Vertex2> > edges = region.Edges;

            valid = Sort(edges);
            if (!valid)
            {
                continue;
            }
            // List<Vector3> contour = new List<Vector3>();
            List <GraphLinked.Node> contour = new List <GraphLinked.Node>();
            foreach (VoronoiEdge <Vertex2> e in edges)
            {
                Vertex2 v0 = e.From.CircumCenter;
                Vector3 p0 = new Vector3(v0.X, 0, v0.Y);
                Vertex2 v1 = e.To.CircumCenter;
                Vector3 p1 = new Vector3(v1.X, 0, v1.Y);
                centroid += p0;

                var nodeFrom = city.AddNode(p0, false);
                var nodeNext = city.AddNode(p1, false);
                contour.Add(nodeFrom);
                var link = city.AddLink(nodeFrom, nodeNext);
            }
            GraphLinked.Cell cell = new GraphLinked.Cell(contour);
            regions.Add(cell);
        }
    }
Ejemplo n.º 4
0
 public void InitWorld(VoronoiMesh2 voronoi, NoiseAtom na)
 {
     regions.Clear();
     edgesIndex.Clear();
     regionsIndex.Clear();
     edges.Clear();
     vertexs.Clear();
     this.na = na;
     foreach (var r in voronoi.Regions)
     {
         AddRegion(r);
     }
     CalcVertex();
 }
Ejemplo n.º 5
0
        private void Start()
        {
            lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored"));

            List <Vertex2> vertices = new List <Vertex2>();

            Random.InitState(seed);
            for (int i = 0; i < NumberOfVertices; i++)
            {
                float x = size * Random.Range(-1.0f, 1.0f);
                float y = size * Random.Range(-1.0f, 1.0f);

                vertices.Add(new Vertex2(x, y));
            }

            voronoi = new VoronoiMesh2();
            voronoi.Generate(vertices);
        }