Algorithm Delaunay三角剖分与最大内切圆的混淆

Algorithm Delaunay三角剖分与最大内切圆的混淆,algorithm,geometry,computational-geometry,cgal,delaunay,Algorithm,Geometry,Computational Geometry,Cgal,Delaunay,我需要找到一个凸多边形的最大内接圆,我搜索了很多站点,我发现这可以通过使用Delaunay三角剖分来完成。我在CGAL讨论中发现了一个使用CGAL的算法: 您可以使用CGAL轻松地计算: 首先,计算点的Delaunay三角剖分 然后,在三角剖分的所有有限面上迭代。 对于每个有限面f 计算其外心c 在三角测量中找到c(为了加快速度,可以给出一个 f的顶点作为点位置的起始提示) 如果locate(c,hint)返回的面是有限的,则外心 c位于点的凸包中,因此,f是候选点 如果f是这样一个候选面,则

我需要找到一个凸多边形的最大内接圆,我搜索了很多站点,我发现这可以通过使用Delaunay三角剖分来完成。我在CGAL讨论中发现了一个使用CGAL的算法:

您可以使用CGAL轻松地计算:

首先,计算点的Delaunay三角剖分

然后,在三角剖分的所有有限面上迭代。 对于每个有限面f

  • 计算其外心c
  • 在三角测量中找到c(为了加快速度,可以给出一个 f的顶点作为点位置的起始提示)
  • 如果locate(c,hint)返回的面是有限的,则外心 c位于点的凸包中,因此,f是候选点
  • 如果f是这样一个候选面,则计算其平方外圆半径 仅保留具有最小平方外圆半径的面
CGAL手册(第2D章三角测量,以及一些内容 从内核)显示了执行此操作的每个基本函数


我对这个算法的最后一部分有点困惑。当我读到它时,我从中了解到,三角测量面的最小外圆半径是最大内圆的半径。但是,从使用Delaunay三角剖分的多边形示例来看,似乎即使是最小的外接圆有时也无法装入多边形内部,因此如何使其具有与最大内接圆相同的半径?

最后一步可能意味着选择三角形的最小面。然后冲洗并重复。

多边形中的最大内接圆。 多边形最大内切圆问题的经典计算几何解决方案是使用多边形的面与面之间的距离。多边形的形状。这种方法适用于更一般的设置,如带孔的多边形,请参见类似问题

凸输入。 然而,输入多边形的凸性给了问题更多的结构,我想对此进行评论。考虑下面的凸输入多边形(黑色)、Voronoi图(蓝色)和以Voronoi节点为中心的最大内接圆(绿色)。

经典的基于Voronoi的解决方案是(i)计算Voronoi图,以及(ii)取具有最大间隙(即到其定义面的距离)的Voronoi节点

带孔多边形(即顶点和边集)的Voronoi图可在O(n logn)时间内计算,c.f。后来给出了一个简单多边形中轴的O(n)算法

然而,对于凸多边形,在1989年已经知道了一种在O(n)时间内运行的Voronoi图的时间优化算法,这是由于。该算法基本上遵循以下思想:考虑以单位速度向内移动的灰度偏移曲线。如果将此移动投影到三个空间中,其中z轴为多边形上的单位坡度屋顶的时间:

该屋顶模型的特征还可以如下所示:在每个多边形边上以与多边形成45°的坡度放置半个空间(以便它们包含多边形),并将它们全部相交。如果你能快速计算半空间的交集,那么你也能快速计算凸多边形的Voronoi图。实际上,对于最大内切圆问题,我们不需要回到沃罗诺图,而是取屋顶的一个峰值,它标志着最大内切圆的中心

现在半空间被对偶为点,然后半空间的交集对应于它的对偶点的凸包。Aggarwal等人现在发现了一种O(n)算法,用于该设置产生的点的凸包

在我的一篇文章中可以找到这种构造的总结,它导致了任意维凸多面体的Voronoi图算法

简单快速的实现。一种计算Voronoi图的更简单算法的动机是。对于凸多边形,Voronoi图和直骨架是相同的

直线骨架实现背后的算法基本上模拟了波前结构(灰色偏移曲线)的演变。对于凸多边形,这将简化为查找折叠的边序列

因此,一个简单的O(n logn)算法可以如下所示:

  • 构造多边形边的圆形列表。计算波前传播期间每条边的折叠时间,并将此事件插入优先级队列
  • 直到队列为空:取出下一个边缘折叠事件:从圆形结构中移除边缘,并更新移除边缘相邻边缘的折叠时间
  • 实际上,您可以进一步简化上述算法:您不需要更新优先级队列中的边折叠,只需插入新的边折叠:由于边的新折叠时间严格较低,因此您总是先获得正确的事件,然后忽略其他事件,并且队列的增长不超过2n。因此,您不会影响O(n logn)时间复杂性

    对于最大内切圆问题,您可以进一步简化上述算法:您查找的Voronoi节点(对应于直线骨架节点)是由于优先级队列上循环结束时的最终三角形塌陷造成的


    这个算法在实践中应该很快,只需要几行代码。

    请重新阅读该线程的开头,它是关于一个不同的问题,所以答案不一样是正常的。。。你想要的是一个不与多边形相交的磁盘,而这个线程是关于寻找一个不包含任何顶点(不包括边)的磁盘。@Marglisse谢谢你的回复。我重新读取线程,所以“最大空圆”问题不考虑边缘?我看到naresh提到他想找到最大的刻有铭文的cir