public Vector2[][] GenerateVoronoi(Vector2[] points, Vector2 center) { eq.ClearAll(); Cell[] allCells; float boundaryLow = -1; float boundaryHigh = 1; float boundaryLeft = -1; float boundaryRight = 1; // Read input points. allCells = new Cell[points.Length]; for (int i = 0; i < points.Length; i++) { float x = points[i].x; float y = points[i].y; allCells[i] = new Cell(0, i, x, y); eq.Enqueue(allCells[i]); } Vector2 centerV2 = new Vector2(center.x, center.y); BeachLine BL = new BeachLine(allCells, centerV2); float lastY = float.MaxValue; while (!eq.IsEmpty()) { Site eventP = eq.Dequeue(); if (eventP.type == 0) { BL.Insert(eventP); } else if (eventP.type == 1) { BL.HandleVVEvent((VoronoiVertexPoint)eventP); } BL.Print(); } Vector2[][] OutputPoints = new Vector2[points.Length][]; for (uint i = 0; i < points.Length; ++i) { Cell cell = allCells[i]; cell.HandleEdges(boundaryHigh, boundaryLow, boundaryLeft, boundaryRight); cell.Sort(); OutputPoints[i] = new Vector2[cell.relatedVoronoiVertex.Count]; for (int j = 0; j < cell.relatedVoronoiVertex.Count; ++j) { OutputPoints[i][j] = new Vector2(cell.relatedVoronoiVertex[j].x, cell.relatedVoronoiVertex[j].y + cell.relatedVoronoiVertex[j].radius); } } return(OutputPoints); }