私はすでに発射体の動きを扱うための数学を見つけましたが、私のものとの違いは、提供された方向ベクトルと時間でした.
私のコードでは、方向ベクトルは -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]