【问题标题】:How to detect whether a circle and a polygon overlap?如何检测圆形和多边形是否重叠?
【发布时间】:2019-12-23 11:59:53
【问题描述】:

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

我检查了两种情况:

  • 多边形顶点在圆内
  • 圆心在多边形内

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

【问题讨论】:

  • 请注意,这是两件不同的事情:仅测试它们是否重叠比找到确切的交叉点形状要容易得多。
  • 但我只需要测试它们是否重叠,但我找不到确切的逻辑

标签: math svg intersection


【解决方案1】:

这是一种可能的方法。

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

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

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

    • 求 p,圆心到直线 (a,b) 的投影。
    • 如果 p 到圆心的距离大于半径,则该边没有重叠。
    • 1234563

【讨论】:

  • 我知道这个答案是在大约两年前做出的,但你能澄清一下最后一个要点的意思吗?是不是保证p 将在ab 之间,因为p 是圆的中心点在(a,b) 线上的投影? p 不会总是在线上某处的某个点(a,b)
  • @JensB,投影将在(无限长)线上,但不一定在线段上。
  • 啊,现在我明白了。我以为line(a,b) 指的是从a 延伸到b 的线段。感谢您清理它!
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多