private static IList <VERTEX> GetCentroids <VERTEX>(IVoronoiMesh2 <VERTEX> voronoi) where VERTEX : class, IVertex, new () { return(voronoi.Regions // Exclude degenerate regions .Where(region => region.Edges.Count() > 2) // Get region centroids .Select(region => MathHelper <VERTEX> .GetCentroid(region.Edges .Select(edge => edge.From.CircumCenter) .ToList())) .ToList()); }
private void Update() { if (firstTime || lastSeenRelaxationIterations != relaxationIterations) { currentVoronoiMesh = originalVoronoiMesh; for (int i = 0; i < relaxationIterations; ++i) { LloydsRelaxation2.Iterate(currentVoronoiMesh, out currentVoronoiMesh, out currentDelaunayTriangulation); } firstTime = false; lastSeenRelaxationIterations = relaxationIterations; } }
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)); } currentVoronoiMesh = new VoronoiMesh2 <Vertex2>(); currentVoronoiMesh.Generate(vertices, out currentDelaunayTriangulation); originalVoronoiMesh = currentVoronoiMesh; firstTime = true; }
public static void Iterate <VERTEX>(IVoronoiMesh2 <VERTEX> src, out IVoronoiMesh2 <VERTEX> dst1, out IDelaunayTriangulation <VERTEX> dst2) where VERTEX : class, IVertex, new () { dst1 = new VoronoiMesh2 <VERTEX>(); dst1.Generate(GetCentroids(src), out dst2); }
public static void Iterate <VERTEX>(IVoronoiMesh2 <VERTEX> src, out IVoronoiMesh2 <VERTEX> dst) where VERTEX : class, IVertex, new () { dst = new VoronoiMesh2 <VERTEX>(); dst.Generate(GetCentroids(src)); }