如何找到所有包含在正方形内的不相交多边形之间的最大圆

时间:2016-02-23 17:20:22

标签: computational-geometry

让P1 ,. 。 。 ,Pk是成对不相交的简单多边形的集合,总共有n个边,全部包含在给定的正方形内。找到最大的 可以刻在这个方格中的圆盘,使其与多边形Pi的所有内部不相交。

正在考虑使用线段的Voronoi图...

1 个答案:

答案 0 :(得分:0)

考虑广场上的距离场d(x, y),它为每个点(x, y)定义到最近的多边形的距离。你的目标是找到这个距离场的最大值。

一种非常简单的方法是对网格上的距离​​场进行离散化,并找到具有最大值的顶点。您还可以在候选点周围进一步细分网格。

但您也可以采用持续优化步骤。为此,计算离散化的距离场并使用顶部顶点作为连续优化的种子。在此优化中,移动点,使距离增加,直到您不再移动为止。这将找到局部最大值。通过适当的初始化,其中一个最大值很可能是全局最大值。

要查找移动方向,请找到当前磁盘与所有多边形的交点。如果有一个交叉路口,向相反方向移动肯定会增加距离。如果有更多的交叉点,您可以平均方向。您可以使用预定义的步长或估计值。要估计步长,找到到下一个交点的距离(不包括已经找到的交叉点基元 - 而不是整个多边形),让我们命名这个距离d_next。您可以安全地移动(d_next - d_current) / 2而不会导致新的交叉点。可能有更聪明的方法来计算步长。