如何找到可以容纳在凹多边形内的最大圆?
只要可以实时处理具有约50个顶点的多边形,就可以使用蛮力算法。
解决此问题的关键是首先观察:适合任意多边形内部的最大圆的中心是:
为什么?因为圆弧边缘上的每个点都与该中心等距。根据定义,最大的圆将具有最大的半径,并且将在至少两个点上接触多边形,因此,如果您发现距多边形最远的点,则您已经找到了圆心。
此问题出现在地理环境中,并且可以任意精度迭代解决。它称为不可访问的波兰人问题。请参阅“无法接近的极点:地球上最偏远的地方的计算算法”。
基本算法的工作原理如下:
请注意,如何测试点是否在多边形内:解决问题的这一部分最简单的方法是将射线投射到该点的右侧。如果它穿过奇数个边,则位于多边形内。如果是偶数,就在外面。
此外,就测试到任何边缘的距离而言,您需要考虑两种情况:
(2)容易。到边缘的距离是到两个顶点的距离中的最小值。对于(1),该边缘上最接近的点将是从要测试的点开始以90度角与该边缘相交的点。请参见点到射线或线段的距离。