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); }
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"); }
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); } }
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(); }
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); }