检测矩形和多边形之间交叉的方法?

Hic*_*ich 8 algorithm math collision-detection

检测红色矩形是否与黑色多边形重叠的最佳方法是什么?请参考此图片:

红色矩形和黑色多边形

小智 5

有四种情况。

  1. Rect 在 Poly 之外
  2. 矩形与多边形相交
  3. 矩形在 Poly 里面
  4. Poly 在 Rect 里面

首先:根据多边形检查矩形中的任意点(参见多边形中的点)。如果它在里面,你就完成了,因为它是第 3 种或第 2 种情况。如果它在外面,则排除第 3 种情况。

第二:根据 Rect 检查 Poly 的任意点以验证/排除情况 4。

第三:检查 Rect 与 Poly 的线是否相交以验证/排除情况 2。

这也应该适用于多边形与多边形(凸面和凹面),但这样更易读。


cod*_*eim 1

简单地查找是否存在交集,我认为您也许可以结合两种算法。

1)光线投射算法。使用每个多边形的顶点,确定其中一个顶点是否在另一个顶点中。假设您不担心实际的交叉区域,而只是担心它的存在。 http://en.wikipedia.org/wiki/Point_in_polygon

2)线相交。如果步骤 1 没有产生任何结果,请检查线相交。

我不确定这是否 100% 正确或最优。

如果您实际上需要确定交叉点的区域,那就更复杂了,请参阅前面的答案:

一种简单的多边形相交算法