我已经找到了处理弹丸运动的数学方法,但与我的不同之处在于提供的方向矢量和时间。
在我的代码中,我的方向向量是 -1 到 1,时间是间隔时间。
如何使用这些向量和时间来计算由于重力而产生的新方向向量?
请帮忙
我已经找到了处理弹丸运动的数学方法,但与我的不同之处在于提供的方向矢量和时间。
在我的代码中,我的方向向量是 -1 到 1,时间是间隔时间。
如何使用这些向量和时间来计算由于重力而产生的新方向向量?
请帮忙
我假设 3D 空间(重力指向 -Y 方向)
在里面
// 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 中,还可以添加您的玩家速度矢量。如果你的射弹是火箭,那么在它的方向上增加它的信任加速度......
在某些计时器中更新
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]