float CellArea(Voronoi.Cell cell) { float area = 0.0f; Point p1, p2; for (int iHalfEdge = cell.halfEdges.Count - 1; iHalfEdge >= 0; iHalfEdge--) { HalfEdge halfEdge = cell.halfEdges[iHalfEdge]; p1 = halfEdge.GetStartPoint(); p2 = halfEdge.GetEndPoint(); area += p1.x * p2.y; area -= p1.y * p2.x; } area /= 2; return(area); }
Point CellCentroid(Voronoi.Cell cell) { float x = 0f; float y = 0f; Point p1, p2; float v; for (int iHalfEdge = cell.halfEdges.Count - 1; iHalfEdge >= 0; iHalfEdge--) { HalfEdge halfEdge = cell.halfEdges[iHalfEdge]; p1 = halfEdge.GetStartPoint(); p2 = halfEdge.GetEndPoint(); v = p1.x * p2.y - p2.x * p1.y; x += (p1.x + p2.x) * v; y += (p1.y + p2.y) * v; } v = CellArea(cell) * 6; return(new Point(x / v, y / v)); }
void OnDrawGizmos() { if (graph) { foreach (Voronoi.Cell cell in graph.cells) { Gizmos.color = Color.black; Gizmos.DrawCube(new Vector3(cell.site.x, 0, cell.site.y), Vector3.one); if (cell.halfEdges.Count > 0) { for (int i = 0; i < cell.halfEdges.Count; i++) { HalfEdge halfEdge = cell.halfEdges[i]; Gizmos.color = Color.red; Gizmos.DrawLine(halfEdge.GetStartPoint().ToVector3(), halfEdge.GetEndPoint().ToVector3()); } } } } }