Учитывая список треугольников Делоне, необходимо получить список ребер, которые будут частью тесселяции Вороного.Список процессов треугольников Делоне в алгоритме Вороного
псевдокод скелета программы является:
getVoronoi(list<point> points) {
list<triangle> triangles = delaunayTriangulation(points);
list<edge> edges = voronoiTessellation(triangles);
//Do something with "edges".
}
Пусть N быть размером 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)
?
Спасибо!
Проблема в том, что я должен знать наихудший случай, когда N = #points, есть такое же количество треугольников и точек? –
Да. триангуляция 2D Delauney имеет O (#points) число треугольников –
У вас есть документ или подтверждение этого ?, спасибо! –