-1

我已经找到了处理弹丸运动的数学方法,但与我的不同之处在于提供的方向矢量和时间。

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

如何使用这些向量和时间来计算由于重力而产生的新方向向量?

请帮忙

4

1 回答 1

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是摩擦常数 (try ~0.01)m是弹丸质量 [kg]

于 2014-05-06T06:56:01.330 回答