私はプロポーショナルナビゲーションの可能な限り単純な形式を実装しようとしています。つまり、ミサイルはターゲットからターゲットへの方向が変化する方向に向きを変え、ターゲットからターゲットへの方向が変化しなくなったら、迎撃コースにいます。
それで、私は2Dミサイルが直面している方向に一定の速度で移動していて、一定の速度で回転することができ、間隔ごとに次のようなものでミサイルを更新します:
Position += VectorProduct (Direction * Speed * TimePassed)
PreviousTargetBearing = TargetBearing
TargetBearing = AngleBetween(TargetPosition, Position)
TargetBearingDelta = TargetBearing - PreviousTargetBearing
If TargetBearingDelta > 0: MissileDirection += TurnRate * TimePassed
If TargetBearingDelta < 0: MissileDirection -= TurnRate * TimePassed
問題は、ミサイルが常に発射方向を中心に振動することです。これは、ミサイルが最初に回転するとすぐに、TargetBearingDeltaの符号が反転し、反対方向に回転するためです。
この問題を解決する最も簡単な方法は何ですか?私は簡単なものを見逃していると確信しています。
関連するStackOverflowの質問:ゲームの「インターセプトミサイル」を作成する方法は?
繰り返しになりますが、私は特に、一般的なホーミングアルゴリズムではなく、比例ナビゲーションアルゴリズムの実装に関心があります。
更新:明確な答えは、方位をチェックして毎ターン方向を調整するのではなく、2つを交互に行うことだと思います。やってみます。