我怎样才能代表voronoi图?

时间:2013-10-04 17:07:00

标签: algorithm data-structures

我在矩形内有一些多边形(障碍物)(边界是障碍物),我想找到Voronoi图,这意味着图表显示了与两个障碍物距离相等的线。

例如(使用this创建,请忽略笑脸和旗帜):

enter image description here

voronoi图似乎不是一组多边形(很容易表示)。这个似乎有曲线。它是通过计算每个像素到每个障碍物的距离来生成的。

我看过this,但它没有多边形,只有点。

我如何表示这样的voronoi图?

(顺便说一句,如果你有关于这个voronoi路径规划问题的一些好文章我也会很高兴...我只能找到许多点作为障碍。)

2 个答案:

答案 0 :(得分:5)

您可以使用Voronoi Diagram中的Boost.Polygon实施。也许如果你想要自己的实现,你可以学习查看Boost源代码。

  

Boost.Polygon库提供了Voronoi的实现   二维空间中的图数据结构。内部代表   由三个数组组成,分别包含:Voronoi单元   (代表由Voronoi界定的输入站点周围的区域   edge),Voronoi顶点(三个或更多Voronoi边缘的点)   相交),Voronoi边缘(包含的一维曲线)   从两个最近的输入站点等距离的点)。每一个   基元(单元格,顶点,边)包含指向其他链接的指针   原语,因此总是可以有效地遍历   Voronoi图。

link还有来自该数据结构的可视化表示。

答案 1 :(得分:-1)

首先,Voronoi图不是障碍物。它可以用来解决这些问题,但不仅仅是为了解决这个问题 此外,Voronoi图仅在特殊情况下是一组多边形。但这个案例是我见过的最常见的案件 在图片from Mike Bostock's blog中,我们看到一组有限点作为图表创建的基础。在这种情况下,图表必须是一组多边形。它有非常简单的数学解释:每对基点(这些对中有一组有限!)有一条垂直平分线线,即相对于该对的等距点集(它是与中间的垂线)连接这一对的范围)。所以Voronoi图只是一组多边形,每个边都是垂直平分线的一部分。很明显,如果你看一下图表的图片。

在第一张照片中(有微笑和旗帜)我们有一些几何形状的障碍物,即现在我们有无限的点数。在这种情况下,我们只需关心它的边缘。每个边缘都是无限连通且连续的点集。所以我们有一组无限的垂直平分线,这就是为什么有些多边形得到了曲线 - 每条曲线都只是一个古老的多边形,边数限制为无穷大。 也许您应该从维基百科开始挖掘更多信息和算法?