2D运动物体碰撞

时间:2016-05-09 15:54:27

标签: geometry collision-detection physics collision

我正在创建两个2D模拟,我需要确定2个移动对象AB是否会跨越路径。 A以恒定速度Va移动,B以Vb移动。

我能够确定物体路径相交的点 但我无法弄清楚他们是否会碰撞。

我使用

计算了碰撞点

This formula

y

相同

2 个答案:

答案 0 :(得分:2)

让我们考虑两个轴对齐矩形的情况。如果两者的投影都与X轴相交,并且两者的投影都与Y轴相交,则它们相交。 rename_axis

第一个矩形坐标(Ax1,Ay1),(Ax2,Ay2),速度矢量(VAx,VAy)
第二个矩形坐标(Bx1,By1),(Bx2,By2),速度矢量(VBx,VBy)

X投影相交的时间间隔:

Ix=(t1,t2)

间隔为u1=(By1-Ay2)/(VAy-VBy) u2=(By2-Ay1)/(VAy-VBy) (如果t2

对于Y投影

Iy=(u1,u2)

间隔为{{1}}(或(u2,u1),如果u2< u1)

检查这两个时间范围Ix和Iy是否相交。如果他们这样做,物体会发生碰撞。

答案 1 :(得分:0)

这就是我在代码中设置它的方法,虽然它可能无法简单地将其添加到您的代码中,希望这有助于您理解数学:

如果两个对象相交,

rectangleIntersect()将返回true。

public static boolean intersectRange(int min, int max, int min2, int max2){
    return Math.max(min, max) >= Math.min(min2, max2) && 
           Math.min(min, max) <= Math.max(min2, max2);
}

public static boolean intersectRange(float min, float max, float min2, float max2){
    return Math.max(min, max) >= Math.min(min2, max2) && 
           Math.min(min, max) <= Math.max(min2, max2);
}

public static boolean rectangleIntersect(Rectangle rect, Rectangle rect2){
    return intersectRange(rect.getX(), rect.getX() + rect.getWidth(), rect2.getX(), rect2.getX() + rect2.getWidth()) &&
            intersectRange(rect.getY(), rect.getY() + rect.getHeight(), rect2.getY(), rect2.getY() + rect2.getHeight());
}