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