Geometry 二维运动对象碰撞

Geometry 二维运动对象碰撞,geometry,collision-detection,physics,collision,Geometry,Collision Detection,Physics,Collision,我正在创建一个两个2D模拟,我需要确定两个移动对象a和B是否会相交。 A以恒定速度移动Va,B以Vb移动 我能确定物体路径的交点 但我不知道它们是否真的会碰撞 我用计算机计算了碰撞点 和 y 让我们考虑两个轴对齐矩形的情况。如果两者到X轴的投影相交,并且两者到Y轴的投影相交,则它们确实相交。 第一个矩形坐标(Ax1,Ay1),(Ax2,Ay2),速度矢量(VAx,VAy) 第二个矩形坐标(Bx1,By1),(Bx2,By2),速度矢量(VBx,VBy) X投影相交的时间间隔: Ax2+VAx

我正在创建一个两个
2D
模拟,我需要确定两个移动对象
a
B
是否会相交。
A
以恒定速度移动
Va
,B以
Vb
移动

我能确定物体路径的交点 但我不知道它们是否真的会碰撞

我用计算机计算了碰撞点


<>和<代码> y

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

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

X投影相交的时间间隔:

Ax2+VAx*t1=Bx1+VBx*t1
t1=(Bx1-Ax2)/(VAx-VBx)
t2=(Bx2-Ax1)/(VAx-VBx)
间隔为
Ix=(t1,t2)
(或(t2,t1)如果t2 对于Y-投影

u1=(By1-Ay2)/(VAy-VBy)
u2=(By2-Ay1)/(VAy-VBy)
间隔为
Iy=(u1,u2)
(或者如果u2
检查这两个时间范围Ix和Iy是否相交。如果它们发生碰撞,对象就会发生碰撞。

这就是我在代码中设置它的方式,尽管简单地将其添加到代码中可能不起作用,希望这能帮助您理解数学:

如果两个对象相交,则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());
}
public静态布尔区间(int-min,int-max,int-min2,int-max2){
返回Math.max(min,max)>=Math.min(min2,max2)和
Math.min(min,max)=Math.min(min2,max2)和

数学。最小值(最小值,最大值)取决于对象的形状。它们是AABB的、球体、凸面、样条曲线还是通用点外壳?我想我明白了这个想法…我现在将尝试实现它。非常感谢