Delaunay 三角剖分的 Voronoi 站点点

Voronoi site points from Delaunay triangulation

如何根据 Delaunay 三角剖分确定确切的 Voronoi 位点 (cells/regions)?

如果已经构建了 delaunay 三角剖分,则只需连接每个三角形的相邻外接圆中心即可轻松计算出 voronoi 的边。

确定 Voronoi points/sites 也很容易,因为它们由 Delaunay 三角剖分中每个三角形的每个点表示。

但是,您如何确定特定的 voronoi 站点与来自 d​​elaunay 三角剖分的特定边列表相匹配?

看起来将一个和另一个作为单独的实体很简单,但将它们放在一起是另一个挑战?

查看下图,您可以看到 Delaunay 三角剖分以及对偶 Voronoi 图。我描述的所有内容都可以在下面描绘,以供参考。忽略绿色圆圈,因为它只是我从网上获取的这个特定参考的产物。

如果你想从边缘选择多边形,选择每条边缘的中点和到每个站点的距离,然后对结果进行排序并选择第一个和第二个(当它们相等时)并将它们保存到多边形中。对于边界,当然只有 1 个边。也许是骗子:Getting polygons from voronoi edges.

这有点棘手,很难形象化。我很少被边界困住。这是Alink的原始答案:How can I get a dictionary of cells from this Voronoi Diagram data?.

Delaunay 三角剖分中的每个顶点代表一个 Voronoi 站点。因此,要创建一个站点的单元格,您需要一个这样的三角形 t 和 t 中的一个顶点 v。现在计算 v 和 t 的两个剩余顶点之间的 Voronoi 边。通过一个一个地遍历 v 周围的三角形来重复这个过程。假设你可以存储三角形之间的邻域关系,这最多需要 O(k) 时间,k 是 v 的相邻三角形的数量。

这会将 Delaunay 三角剖分转换为 O(n) time/space 中的 Voronoi 图,用于 n 个站点。不需要排序,否则首先进行 Delaunay 三角剖分有什么意义。