如何用单位方向向量计算弹丸运动

时间:2014-05-06 04:40:31

标签: math graphic projectile

我已经找到了处理弹丸运动的数学计算,但与我的不同的是方向向量和时间。

在我的代码中,我的方向向量是-1到1,时间是间隔时间。

如何使用这些矢量和时间来计算由于重力引起的新方向矢量?

请帮忙

1 个答案:

答案 0 :(得分:0)

我假设3D空间(重力指向-Y方向)

  1. <强>初始化

    // player / gun parameters
    const float v0 = ???;             // [m/s] gun projectile escape velocity
    float direction[3] = { ?,?,? };  // [-] your unit direction vector
    float position[3] =  { ?,?,? };  // [m] your player position + gun barrel offset
    
    // projectile parameters
    float a[3]={0,-9.81,0};   // [m/s^2] actual acceleration (just gravity in down direction)
    float v[3]=direction*v0;  // [m/s] actual velocity
    float p[3]=position;      // [m] actual position
    

    如果你想要精确地添加到v你的球员速度矢量。如果你的射弹是火箭,那么它的方向也增加了它的信任加速度......

  2. 更新某个计时器

    const float dt = 0.001; // [s] update 'timer' period
    
    v += a*dt;
    p += v*dt;
    

    在这里你可以添加以下测试:点击某些东西,击中地面......还有摩擦是一个好主意...

    F=c0*|v|^2; for air
    F=c1*|v|^3; for liquid
    

    方向(-v/|v|)所以添加以开始更新:

    a={0,-9.81,0}
    a-=v*c0*|v|/m; // or a-=v*c1*|v|^2/m;
    

    其中c0,c1是摩擦常数(尝试~0.01)而m是弹丸质量[kg]