我正在编写一个函数,它接收一个具有轨迹的物体(包括起始位置、启动速度和加速度,所有这些都表示为Vector3s),如果它碰到另一个物体,返回碰撞点和碰撞时间。我用带时间步长的运动方程来检测可能发生的碰撞,我可以用这种方法得到碰撞点,但一旦有了,我就想找出碰撞发生的确切时间。我想重新安排一个运动方程来求解时间,并插入我已经有的东西,但我想不出如何利用所有三个运动轴来实现这一点,因为我的其他值是矢量3,时间只是标量。我考虑过在一个轴上进行计算,但我不确定这是否会得到一个准确的结果。
仅仅基于一个轴进行计算是准确的,还是有一种方法将所有这三者结合到计算中?我用来解时间的公式是:
t = (v_init +/- Sqrt((v_init)^2 - (accel * disp * 4 * .5)))/accel;当v_init为初速度时,disp为总位移,accel为加速度。我是从运动方程出发的:
D= v*t + .5*a*t^2
发布于 2020-07-31 07:08:45
让我在一般情况下写字。分方向运动定律是
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。
z(t) =k
用来找出弹丸击中飞机的时间t_c。然后用上述公式计算碰撞坐标x( t_c )和y(t_c),用t_c代替t。
如果平面上有一般方程
A x+++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+++d=0
采用t>0的解决方案(对于x、y和z,我放弃了对t的依赖)。
要在C++中解决这个问题,您可以搜索一个数学库,比如本征,它有一个用于非线性系统的模块。
https://stackoverflow.com/questions/63186310
复制相似问题