Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 三维弹丸运动:计算碰撞时间_C++_Projectile_Kinematics - Fatal编程技术网

C++ 三维弹丸运动:计算碰撞时间

C++ 三维弹丸运动:计算碰撞时间,c++,projectile,kinematics,C++,Projectile,Kinematics,我正在编写一个函数,它接收三维空间中具有轨迹(包括起始位置、起始速度和加速度,均表示为矢量3)的对象,如果它击中另一个对象,则返回碰撞点和碰撞时间。我使用带有时间步长的运动学方程来检测可能发生的碰撞,我可以通过这种方式得到碰撞点,但一旦我得到了,我想找到碰撞发生的确切时间。我想重新排列运动学方程来解时间,并插入我已经有的,但我不知道如何使用所有三个运动轴来实现这一点,因为我的其他值是Vec3,时间只是标量。我曾考虑过只在一个轴上进行计算,但我不确定这是否能得到准确的结果 仅仅基于一个轴进行计算是

我正在编写一个函数,它接收三维空间中具有轨迹(包括起始位置、起始速度和加速度,均表示为矢量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,为什么要忽略抛射体的重力加速度?如果不是重力的话,你说的加速度是什么?对不起,这是一个不好的说法,有重力,但它可以在任何方向,而不仅仅是向下。这是唯一的加速。如果这听起来很奇怪,我很抱歉