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

Tra*_*isG 4 collision-detection

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

使用这个实现,当我想找到两个碰撞矩形的最小位移矢量时,算法有时会(在两种情况中的一种情况下准确)给出错误的"方向",其中一个矩形需要被推动才能获得远离它碰撞的矩形.它将产生与它应该进入的方向完全相反的方向.

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

这是Java中算法的实现:

http://pastebin.com/fgAwBsGv

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

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

谢谢你的帮助!

Tra*_*isG 10

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

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

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