私のゲームには魚雷があり、それらは毎秒 0 メートルから始まり、現実的に加速します。数秒後に加速をやめ、一定の速度で前進します。
ターゲットまでの距離があり、基本的に自動照準のリードタイムを計算しようとしています。
与えられた
ターゲットまでの距離;
加速度 (毎秒);
燃焼時間 (加速が停止するまでの秒数);
基本的に、発射体が移動している平均メートル/秒を判断する必要があります。
私がそれを行うことができる唯一の方法は、このようなものです。
curdistance; //stores distance traveled per second
currentspeed; //stores speed at a given second
acceleration;
for(int timer = 1; curdistance < distanceToTarget;timer++)
{
currentspeed = currentspeed + acceleration;
curdistance = curdistance + ( currentspeed);
if(timer >= burnTime)
{
acceleration = 0;
}
}
これで動作しますが、2 つの問題があります。
燃焼時間は int である必要があります。そうでない場合、分数が小さいほど、精度を維持するための実行回数が多くなります。
たとえば、精度を維持するために 4.2 の燃焼時間が必要な場合は、42 回実行し、10 秒ごとに計算する必要があります。
また、タイマーの精度によっては、ターゲットをどれだけオーバーシュートするかによって、平均がかなりずれることもあります。
私の発射物が毎秒 30 メートルで移動し、121 メートル移動する必要がある場合、問題なく移動する前に、さらに 1 秒の移動が追加されます。実際よりも29メートル離れた地点で。
このアルゴリズムでこれに対処する唯一の方法は、10 秒または 100 秒ごとにより頻繁にチェックすることです。
これを正確に解くことができる、私が知らない数学の方程式があるかもしれないような気がします。
ヘルプはありますか?