N个圆的共同重叠

Col*_*lMo 5 algorithm math geometry computer-science computational-geometry

我想用半径和中心坐标表示N个圆,我想知道是否存在一种算法来确定点P是否存在,使得P在所有圆内。

Pet*_*vaz 4

一种简单的 O(n^3) 方法是简单地计算每对圆的交点,然后对每个交点进行测试以查看它是否在所有圆中。

将有 O(n^2) 个交点,测试每个交点都需要 O(n),因此总体来说是 O(n^3)。

我相信所有圆内都有点而不是交点的唯一方法是最里面的圆完全位于其他圆内,所以您还应该测试每个圆的中心。

  • 一个加速:如果所有圆都没有共同点,则很可能存在一对不相交的圆。因此,对于许多“否”实例,您只需 O(n^2) 即可得到正确的“否”答案,并且 2 圆相交测试非常快:是 (r1+r2)^2 < (x1- x2)^2 + (y1-y2)^2? (不过,这并不能捕获*所有*“否”实例:例如,可以排列 3 个圆,以便其中任何一对圆都有一些轻微的重叠,但没有点位于所有 3 个圆的公共交点中。因此,完整的 O在最坏的情况下仍然需要 (n^3)。) (3认同)