如何有效地测试任意多边形是否与正方形相交?

时间:2015-05-19 21:04:21

标签: algorithm math geometry polygon intersection

多边形可以是凸的,也可以不是凸的。我们可以假设正方形的边缘与X和Y轴对齐。

计算交点[多边形交集的简单算法] 1是一种过度杀戮,因为我只需要知道它们是否相交(是或否)。

2 个答案:

答案 0 :(得分:2)

我不确定这是最着名的算法(实际上我更确定有更好的和已知的算法),但我相信这个解决方案应该有效。

这个想法是将问题“减少”到多边形裁剪到裁剪区域的问题中(即将问题转换为不同的问题并用解决新问题的算法解决它)。减少这样做:

  • 如果您最终将多边形的某些部分留在裁剪区域内 - 那么就会有一个交叉点
  • 如果你最终有一组空的多边形顶点 - 也就是你在裁剪区域内没有任何东西 - 那么就没有交叉点

用于多边形裁剪的Sutherland-Hodgman算法可以做到这一点 - 如果多边形穿过裁剪区域 - 它将最终为您提供表示裁剪多边形的顶点列表。如果多边形完全在裁剪区域之外(即没有交叉点) - 那么它最终将为您提供一个空列表,因为实际上没有可以在裁剪区域内绘制多边形的部分。

您可以在此处找到有关剪切多边形的Sutherland-Hodgman算法的说明:https://www.youtube.com/watch?v=Euuw72Ymu0M

答案 1 :(得分:1)

您可以迭代多边形的边缘并检查其中一个是否与正方形相交。如果一个人那么你完成了。否则只测试是否1)方形的中心属于多边形2)多边形中的任意点属于正方形或3)1)和2)都没有。在情况1)和2)中它们重叠,在情况3)它们不重叠。