C++ 三维弹丸运动:计算碰撞时间
我正在编写一个函数,它接收三维空间中具有轨迹(包括起始位置、起始速度和加速度,均表示为矢量3)的对象,如果它击中另一个对象,则返回碰撞点和碰撞时间。我使用带有时间步长的运动学方程来检测可能发生的碰撞,我可以通过这种方式得到碰撞点,但一旦我得到了,我想找到碰撞发生的确切时间。我想重新排列运动学方程来解时间,并插入我已经有的,但我不知道如何使用所有三个运动轴来实现这一点,因为我的其他值是Vec3,时间只是标量。我曾考虑过只在一个轴上进行计算,但我不确定这是否能得到准确的结果 仅仅基于一个轴进行计算是准确的,还是有办法将所有三个轴都纳入计算?我用来计算时间的公式是:C++ 三维弹丸运动:计算碰撞时间,c++,projectile,kinematics,C++,Projectile,Kinematics,我正在编写一个函数,它接收三维空间中具有轨迹(包括起始位置、起始速度和加速度,均表示为矢量3)的对象,如果它击中另一个对象,则返回碰撞点和碰撞时间。我使用带有时间步长的运动学方程来检测可能发生的碰撞,我可以通过这种方式得到碰撞点,但一旦我得到了,我想找到碰撞发生的确切时间。我想重新排列运动学方程来解时间,并插入我已经有的,但我不知道如何使用所有三个运动轴来实现这一点,因为我的其他值是Vec3,时间只是标量。我曾考虑过只在一个轴上进行计算,但我不确定这是否能得到准确的结果 仅仅基于一个轴进行计算是
t = (v_init +/- Sqrt((v_init)^2 - (accel * disp * 4 * .5)))/accel;
式中,v_init是初始速度,disp是总位移,accel是加速度。我是根据运动学方程得出的:
d=v*t+.5*a*t^2让我在一般情况下写作。部件方向的运动规律是 x(t)=x0+v_x t+0.5a_x t^2 y(t)=y0+v_y t+0.5 a_y t^2 z(t)=z0+v_z t+0.5a_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。然后用t_c替换t,使用上述公式计算碰撞坐标x(t_c)和y(t_c) 如果平面有一般方程 a x+b y+c z+d=0 我建议将参考系放在平面上,将xy平面放在碰撞平面上,然后应用上述步骤 你也可以解非线性系统 x=x0+v_x t+0.5a_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的解决方案(我放弃了x、y和z对t的依赖)
< C++ >中,你可以搜索一个数学库,例如它有一个非线性系统。< /P>如果所有的3个轴的初始速度和加速度相同,你可以把计算的基础放在一个轴上。我认为情况并非如此,因为我认为在z轴上,重力加速度也应该存在。正在计算地面上的碰撞点吗?按组件进行操作,然后创建结果组件的向量。@漩涡重力被忽略,但加速度是恒定的,并且可以(通常是)在所有三个轴上。三个轴的初始速度和加速度不同。碰撞点只是一个简单的问题plane@badcoder,为什么要忽略抛射体的重力加速度?如果不是重力的话,你说的加速度是什么?对不起,这是一个不好的说法,有重力,但它可以在任何方向,而不仅仅是向下。这是唯一的加速。如果这听起来很奇怪,我很抱歉