我正在编写一个函数,该函数在3D空间中接收具有轨迹(包括起始位置,起始速度和加速度,均表示为Vector3s)的对象,如果碰到另一个对象,则返回碰撞点和时间的碰撞。我使用带有时间步长的运动方程来检测可能发生的碰撞,并且可以通过这种方式获得碰撞点,但是一旦有了碰撞点,我想找到发生碰撞的确切时间。我想到了重新安排运动方程解决时间并插入我已经拥有的东西,但是我不知道如何使用所有三个运动轴来做到这一点,因为我的其他值是Vec3,而时间只是标量。我曾考虑过只在一个轴上进行计算,但是不确定是否会导致准确的结果。
仅基于一个轴进行计算是否准确,或者是否可以将所有三个轴合并到计算中?我用来求解时间的公式是:
t = (v_init +/- Sqrt((v_init)^2 - (accel * disp * 4 * .5)))/accel;
其中v_init是初始速度,disp是总位移,而accel是加速度。我基于运动学方程式:
d = v * t + .5 * a * t ^ 2
答案 0 :(得分:1)
让我写一般情况。分量运动定律是
x(t)= x0 + v_x t + 0.5 a_x t ^ 2
y(t)= y0 + v_y t + 0.5 a_y t ^ 2
z(t)= z0 + v_z t + 0.5 a_z t ^ 2
其中(x0,y0,z0)^ t 是初始位置,(v_x,v_y,v_z)^ t 是初始速度矢量,而(a_x,a_y,a_z)^ t 是加速度的向量。后者的第三部分可能还包括重力加速度。
我假设碰撞平面是水平的,因此方程式 z = k 。求解 t 方程
z(t)= k
用于查找弹丸击中飞机的时间t_c。然后使用上述公式,用 t 替换为 t_c x(t_c)和 y(t_c) >。
如果飞机有通用方程式
a x + b y + c z + d = 0
我建议将参照系放在平面上,使xy平面位于碰撞平面上,然后执行上述步骤。
您也可以解决非线性系统
x = x0 + v_x t + 0.5 a_x t ^ 2
y = y0 + v_y t + 0.5 a_y t ^ 2
z = z0 + v_z t + 0.5 a_z t ^ 2
a x + b y + c z + d = 0
采用 t> 0 的解决方案(我放弃了 t 对 x,y 和 z )。