我已经找到了处理弹丸运动的数学计算,但与我的不同的是方向向量和时间。
在我的代码中,我的方向向量是-1到1,时间是间隔时间。
如何使用这些矢量和时间来计算由于重力引起的新方向矢量?
请帮忙
答案 0 :(得分:0)
我假设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
是摩擦常数(尝试~0.01
)而m
是弹丸质量[kg]