如何知道矩形是否与这样的形状碰撞?

时间:2011-08-19 12:05:03

标签: collision-detection

我有一个矩形,我想知道它是否与这样的形状发生碰撞:http://i.stack.imgur.com/8RMQZ.png

我见过这样的算法:

function intersectRect(r1, r2) {
  return !(r2.left > r1.right || 
           r2.right < r1.left || 
           r2.top > r1.bottom ||
           r2.bottom < r1.top);
}

但只有两者都是矩形才有效。那么我该如何计算出矩形和那个形状呢。

2 个答案:

答案 0 :(得分:2)

我不经常这样做,但你可以这样做:

  • 检查矩形的4个点中是否有任何一个在多边形内
  • 检查多边形的任何(10?)点是否位于矩形

所以这可以简化为“point in polygon”问题。同样,它可能有更好的解决方案。

答案 1 :(得分:0)

你应该看一下基于“分离轴定理”的算法。它几乎是快速2D碰撞检测的标准,因为它(你可能已经猜到)非常快(不涉及任何除法或昂贵的操作,如sin / cos / sqrt / exp),也适用于任何可能的凸形状(甚至是圆圈)。

这是一个很好的教程,解释它:http://www.codezealot.org/archives/55

使得它如此之快的一个原因是该算法具有“早期”场景,您测试一个轴,如果它没有返回所需的结果,您可以退出整个算法,知道形状不是碰撞。

这篇文章的一个很好的副作用是它会吐出你所需要的最小位移矢量来推动你的碰撞形状。