如何从Voronoi图中提取一组点的凸包

时间:2010-11-23 01:18:33

标签: geometry computational-geometry convex-hull voronoi

我需要一种算法,用于从O(n)中的点的Voronoi图计算一组点的凸包。 Voronoi图包含在边界框中,并存储为双连接边列表。输入是半边,其原点在边界框上。

我知道如果它们共享一个无限长的voronoi边缘,则两个点在凸包上相邻。

2 个答案:

答案 0 :(得分:2)

如果你有一个足够大的边界框,只有无限的单元格有边界边界,那么任务似乎并不困难。迭代边界,对于每个边界,向前和向后遍历它以找到第一个非边界边FB。将遍历期间找到的当前和所有边界标记为used。如果框不存在,边FB将是无限的。因此,他们触摸面(fFfB)谁的“中心”是凸包的一部分(当前面是C),而跨边C-to-F是凸壳的一部分。取面fF并从F的双胞胎前进迭代,找到下一个非边界边缘,比如F1。如果它等于'B' - 双胞胎(或它的边界是used),我们就完成了。如果不是,则遍历下一个邻居('fF1')。

答案 1 :(得分:-1)

我相信可以在O(n)时间内计算Voronoi图的凸包。

如果给定的Voronoi图和一个顶点应驻留在CH中,您可以迭代Voronoi图的单元格,并像在Grahm扫描算法中一样使用凸包,但使用不同的方式。

这里只缺少一种理论,请注意下一步......

根据Springer的计算几何学M4书,定理7.4:点q是Vor(P)的顶点,当且仅当其最大的空圆C_p(q)包含三个或更多个位置时边界。 这意味着需要检查每次迭代的站点是在O(1)中完成的,这意味着您只需要迭代O(n)站点。

根据定理7.3,n个点的ste的Voronoi图中的顶点数最多为2n-5(线性顺序)。

因此,可以在O(n)时间内计算Voronoi图的CH。