【发布时间】:2016-04-06 22:26:53
【问题描述】:
给定一个 Delaunay 三角形列表,有必要获取将成为 Voronoi 细分的边的列表。
程序骨架的伪代码是:
getVoronoi(list<point> points) {
list<triangle> triangles = delaunayTriangulation(points);
list<edge> edges = voronoiTessellation(triangles);
//Do something with "edges".
}
设N为points的大小,知道delaunayTriangulation(points)是O(N log N)和triangles=<T1,T2,...TM>,那么,在voronoiTessellation(triangles)中,复杂度必须小于或等于O(N log N)。
计算镶嵌的一种方法是:
voronoiTessellation (list<Triangle> triangles) {
list<Edge> edges;
map<Triangle, Point> centers;
foreach(Triangle triangle in triangles) {
centers.add(triangle,triangle.calculateCircumcircle());
}
foreach(<Triangle triangle,Point point> in points) {
list<edges> triangleEdges = triangle.getEdges();
foreach (Edge edge in triangleEdges) {
Triangle neighbor = searchNeighbor(edge);
Point neighborCircumcenter = centers.get(neighbor);
Line line(point, neighborCircumcenter);
//todo only add this edge once
edges.add(line);
}
}
return edges;
}
我的问题是:voronoiTessellation(T) 的复杂度是多少?小于或等于O(N log N)?
谢谢!
【问题讨论】:
标签: algorithm time-complexity computational-geometry delaunay voronoi