分离轴定理:找出要使用的边法线

时间:2011-05-05 15:28:13

标签: collision-detection

我正在使用此处描述的算法的实现:http://www.codezealot.org/archives/55

使用这个实现,当我想找到两个碰撞矩形的最小位移矢量时,算法有时会(在两种情况中的一种情况下准确)给出错误的“方向”,其中一个矩形需要推入为了摆脱它碰撞的矩形。它将产生与它应该进入的方向完全相反的方向。

这是因为(当然)矩形的两个相对边缘在数学上当然是相似的,因此产生相同的结果。

这是Java中算法的实现:

http://pastebin.com/fgAwBsGv

您可以假设Vector2f,Projection2D等正常运行并生成正确的值。顺便说一句,

我正在使用左手法线,因为多边形是逆时针组装的。原则上,这应该足够了,因为左手法线总是指向多边形。问题是,由于矩形的相对边缘的两个重叠将完全相同,因此算法将简单地使用第一个及其对应的轴。

感谢您的帮助!

1 个答案:

答案 0 :(得分:10)

嘿,我忘了我刚才创建了这个问题,所以我现在要回答它,以防其他人遇到同样的问题:

解决方案是简单地转动位移矢量(乘以-1),如果它指向需要推开物体的形状。

要确定位移矢量是否指向形状,首先必须通过相互减去它们的中心来获得从对象a到对象b的大致方向。之后,检查位移矢量和刚刚创建的方向(a,b)矢量之间的点积。如果是> 0,位移矢量和方向(a,b)指向相同的方向,因此你需要翻转位移矢量。