如何检测圆和多边形是否重叠?

How to detect whether a circle and a polygon overlap?

我正在实现一个可以检测圆和多边形是否重叠的函数。 我有多边形的所有点,我知道圆的中心点和半径。

我检查了两种情况:

但也有其他场景,如附图所示,圆和多边形重叠。任何人都可以建议验证以找到交叉点吗?

这是一个可能的方法。

  • 如果其中一个多边形顶点在圆内,则存在重叠。

  • 如果圆心在多边形内部,则它们重叠。请注意,此测试对于非凸形状而言并非微不足道。例如,考虑一个类似于细螺旋的多边形。

  • 否则,对于多边形的每条边 (a,b):

    • 求圆心到直线(a,b)的投影p。
    • 如果p到圆心的距离大于半径,则这条边不重叠
    • 否则,如果 p 在 a 和 b 之间(所以 p_x 在 a_x 和 b_x 之间,并且 p_y 在 a_y 和 b_y, 包括水平和垂直边缘的情况), 则此边缘有重叠, 否则没有.