【发布时间】:2017-10-13 13:00:06
【问题描述】:
我正在尝试找到一种方法来反转 Voronoi 算法。
基本上,有一些主要由三角形和正方形组成的连接形状,我试图找到一组点,通过使用 Voronoi 算法将重新创建初始形状。
【问题讨论】:
标签: algorithm computational-geometry voronoi
我正在尝试找到一种方法来反转 Voronoi 算法。
基本上,有一些主要由三角形和正方形组成的连接形状,我试图找到一组点,通过使用 Voronoi 算法将重新创建初始形状。
【问题讨论】:
标签: algorithm computational-geometry voronoi
简介。 在 1985 年 Ash 和 Boker 的部分解决方案之后,Biedl et al. 在 2013 年的一篇论文中解决了这个问题。如果您的 Voronoi 节点都是奇数度,那么 Ash 和 Bolker 的算法适用于您。
首先请注意,可能没有 个点集,但 许多 个点集都具有您要求的相同 Voronoi 图。例如,考虑这张图片
取自this website。红点集和蓝点集为您提供相同的黑色 Voronoi 图。 (顺便说一下,红色和蓝色多边形的straight skeletons 也与点集的 Voronoi 图重合。)
算法概述。 大致思路如下。假设一个预言机告诉你 Voronoi 单元中的一个候选点。然后你可以通过相邻单元之间的公共边将该点镜像到相邻的 Voronoi 单元,并继续传播。
但可能会出现问题:镜像点可能位于相邻单元格之外。此外,如果您考虑 Voronoi 节点和事件单元,那么您可以通过事件 Voronoi 边缘围绕一个周期继续传播该点,但您可能不会再次到达原始点。
那么这篇论文的作用如下:
它为您的输入提供了形成 Voronoi 图的充分必要条件。
如果存在这样的点,它会告诉您如何选择有效的起点。实际上,它为您提供了所有可能的起点。
第二部分的工作大致如下:对于每个 Voronoi 单元,通过调查单元的 Voronoi 节点,可以知道该点所在的“区域”。然后取 Voronoi 图的对偶图的生成树并选择任意根。对于每个单元格,您都有一个到“根单元格”的唯一“镜像路径”。应用上述区域的镜像序列并与镜像相交。
交点是所有可能起点的集合。如果它为空,则您的输入不是 Voronoi 图。
进一步简化。 如果您的 Voronoi 节点的度数为奇数,那么问题就简单多了。考虑 Biedl 等人的论文中的图 4。找出每个节点的点必须位于的线。如果一个 Voronoi 单元有两个奇数度的节点,那么您可以将这些线相交并获得单个可能的候选点。您可以对每个 Voronoi 单元执行此操作。
【讨论】:
不会找到每个三角形的质心给你一个定义的点,尽可能远离其他点。
【讨论】: