二维多边形碰撞检测

时间:2010-10-19 20:32:45

标签: c++ collision-detection

有没有人知道简单方法来检查两个多边形,特别是矩形是否发生碰撞?我发现了一种简单的方法,通过检查两个矩形上的任何线是否发生碰撞来看两个是否触摸,但如果一个多边形在另一个中,则无法工作。有没有人知道更有效的方法来做到这一点或只是一种有效的方式?

此外,有人可以给我一个公式或类似的东西,而不仅仅是你对这个问题的看法。

由于

4 个答案:

答案 0 :(得分:13)

查找分离轴定理。有一个教程here

它快速,优雅,强大,不太难,并且拥有大量资源。

答案 1 :(得分:6)

查看http://www.metanetsoftware.com/technique/tutorialA.html

在开发自己的碰撞检测程序时,该网站无限帮助了我。根据可用的处理能力,您可以在碰撞准确性方面做任何您想要的事情。从最少处理器开始:

1)包装盒:适用于矩形形状,可快速启动。您需要知道的是对象的(x,y)位置及其宽度和高度。

2)分离轴定理(SAT):能够处理更复杂的形状,并且非常直观。

3)具有Voronoi区域的SAT(VR):使用关于任何给定多边形的顶点最接近的信息,以减少计算的总数。

以上所有内容都在上述链接中进行了深入解释。应该注意,到目前为止,所提到的方法对凸多边形最有效。如果你想进入荒谬的准确度,你就会开始进行像位图测试这样的事情,这种测试非常缓慢,对于几乎任何东西来说都是过度的。

答案 2 :(得分:0)

有几种方法,简单就是检查X或Y边界是否存在和重叠。然而,这仅适用于与轴对齐的矩形。

有边界检查,是一个对象的角落,其中包含另一个对象的坐标。

从那里碰撞检测变得更加先进。检查是否有一条线可以在任何方向上划线,等等。

答案 3 :(得分:-3)

示例:

矩形A

左上角(x,y)。宽度,高度。

矩形B

左上角(x1,y1)。

条件

(x> = x1)和(x <= x1 +宽度)=&gt; x轴碰撞。对于y轴,但是y和y1和高度相同。