我在矩形内有一些多边形(障碍物)(边界是障碍物),我想找到Voronoi图,这意味着图表显示了与两个障碍物距离相等的线。
例如(使用this创建,请忽略笑脸和旗帜):
voronoi图似乎不是一组多边形(很容易表示)。这个似乎有曲线。它是通过计算每个像素到每个障碍物的距离来生成的。
我看过this,但它没有多边形,只有点。
我如何表示这样的voronoi图?
(顺便说一句,如果你有关于这个voronoi路径规划问题的一些好文章我也会很高兴...我只能找到许多点作为障碍。)
答案 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图只是一组多边形,每个边都是垂直平分线的一部分。很明显,如果你看一下图表的图片。
在第一张照片中(有微笑和旗帜)我们有一些几何形状的障碍物,即现在我们有无限的点数。在这种情况下,我们只需关心它的边缘。每个边缘都是无限连通且连续的点集。所以我们有一组无限的垂直平分线,这就是为什么有些多边形得到了曲线 - 每条曲线都只是一个古老的多边形,边数限制为无穷大。 也许您应该从维基百科开始挖掘更多信息和算法?