我需要找到一个凸多边形的最大内切圆,我搜索了很多网站,我知道这可以通过使用 Delaunay 三角剖分来完成。我在 CGAL 讨论中找到了一个使用 CGAL 的算法的线程:
您可以使用 CGAL 轻松计算:
首先,计算点的 Delaunay 三角剖分。
然后,迭代三角剖分的所有有限面。对于每个有限面 f
- 计算它的外心 c
- 在三角剖分中定位 c(为了加快速度,您可以将 f 的一个顶点作为点位置的起始提示)
- 如果 locate(c,hint) 返回的面是有限的,则外心 c 位于点的凸包中,因此,f 是候选者
- 如果 f 是这样的候选人脸,计算它的平方外接圆半径,只保留最小平方外接圆半径的脸
CGAL 手册(第 2 章 2D 三角剖分,以及内核中的一些内容)显示了执行此操作的每个基本功能。
我对这个算法的最后一部分有点困惑。当我阅读它时,我从中了解到三角剖分面的最小外接半径是最大内切圆的半径。但是从使用 Delaunay 三角剖分的多边形示例来看,似乎即使是最小的外接圆有时也无法放入多边形内,那么它如何与最大的内切圆具有相同的半径?