我正在使用此处描述的算法的实现:http://www.codezealot.org/archives/55
使用这个实现,当我想找到两个碰撞矩形的最小位移矢量时,算法有时会(在两种情况中的一种情况下准确)给出错误的“方向”,其中一个矩形需要推入为了摆脱它碰撞的矩形。它将产生与它应该进入的方向完全相反的方向。
这是因为(当然)矩形的两个相对边缘在数学上当然是相似的,因此产生相同的结果。
这是Java中算法的实现:
您可以假设Vector2f,Projection2D等正常运行并生成正确的值。顺便说一句,
我正在使用左手法线,因为多边形是逆时针组装的。原则上,这应该足够了,因为左手法线总是指向多边形。问题是,由于矩形的相对边缘的两个重叠将完全相同,因此算法将简单地使用第一个及其对应的轴。
感谢您的帮助!
答案 0 :(得分:10)
嘿,我忘了我刚才创建了这个问题,所以我现在要回答它,以防其他人遇到同样的问题:
解决方案是简单地转动位移矢量(乘以-1),如果它指向需要推开物体的形状。
要确定位移矢量是否指向形状,首先必须通过相互减去它们的中心来获得从对象a到对象b的大致方向。之后,检查位移矢量和刚刚创建的方向(a,b)矢量之间的点积。如果是> 0,位移矢量和方向(a,b)指向相同的方向,因此你需要翻转位移矢量。