简单问题 - 速度和碰撞

时间:2009-12-07 18:57:13

标签: math collision-detection

好吧我正在使用太空模拟器,因为大多数太空模拟器我需要在子弹到达时计算出对手发射的位置(3d位置)。我如何根据子弹行进的速度和对手的速度来计算?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

将船的负速度添加到子弹中,以便只有子弹移动。然后计算船的形状与子弹行进的线的交点(* pos - > pos + vel * dt *)。

答案 2 :(得分:1)

计算他和你自己之间的相对速度向量:如果你站着不动,这可以被认为是他的运动。计算他的相对距离向量。现在你知道他已经离开D并且每次都在移动V.你有V'计算,你知道它的长度,但不是它的方向。

现在你构建一个有这两个约束的三角形,他的V和子弹的V'。在二维中它看起来像:

Dx+Vx*t = V'x*t

Dy+Vy*t = V'y*t

V'x^2 + V'y^2 = C^2

简化为:

(Dx/t+Vx)^2 + (Dy/t+Vx)^2 = C^2

您可以使用二次公式来解决这个问题。您可以类似地在三维中应用此技术。还有其他方法可以解决这个问题,但这只是简单的代数而不是矢量微积分。

答案 3 :(得分:0)

这个问题可能不应该是“当子弹击中它时船只的位置”,但如果子弹击中它。假设线性轨迹和恒定速度,计算两个矢量的交点,一个代表射弹路径,另一个代表船的路径。然后,您可以通过将原始位置到交叉点位置的距离除以每个对象的速度来确定每个对象(船舶和子弹)到达该点的时间。如果时间匹配,则会发生碰撞及其发生的位置。

如果你需要更精确的碰撞检测,你可以使用像简单的BSP树这样的东西,它不仅可以快速确定碰撞的方式,而且可以使碰撞发生在什么表面上,如果处理得当,可以确切地说明精确的3d位置碰撞但是,在动态环境中维护这样一棵树可能具有挑战性。