長年のリスナー、初めての発信者。私は XNA で小さな趣味のゲームを作成しています。これは、海上のコンテナ船に似た、宇宙の輸送船に関するものです。制限された 2D 環境で、船と惑星/月の重力圏との遭遇を予測できる必要があります。船と惑星/月、略してボディの位置は、ケプラー軌道要素から決定されます。船と本体は両方とも同じ引力の中心を周回します。
私がこれまでに考案したアプローチは、最初に遠点と近点 (引力の中心から最も遠い点と最も近い点) でいくつかの予備的なチェックを行い、遭遇が可能かどうかを確認することです。このようなチェックの間に、船の軌道が開いている場合 (双曲線、私は放物線のケースを双曲線に近似します)、遭遇することができなかった多くのシナリオを除外できます。
これらのチェックで遭遇が可能であると判断された場合、船が遭遇に適している引力の中心からの最小距離と最大距離を決定します。次に、その最小値と最大値によって定義された 2 つの円と船の軌道の交点を取得します。これにより、船の軌道上に 0、2、または 4 つの点が生じ、ボディの球体に遭遇する可能性のある 0、1、または 2 つの期間が定義されます。この時点で交差がゼロの場合、船の軌道全体が遭遇ゾーンにある可能性があります。これはおそらくまれな極端なケースですが、カバーする必要があります。
船が軌道上でこれらのポイントを通過する時間を取得し、遭遇を確認するための 1 つまたは 2 つの時間枠を与えることができますが、そこから私の最善の解決策は、時間をステップに分割して時間範囲を検索し、ボディの位置を計算することです。それらの時間、そして出会いのテスト。
このアプローチの問題点は、出会いを効率的に見つけるためのステップを踏むサイズを知ることです。Body の位置を一度に取得するのはややコストがかかるため、できる限り少なくしたいと思いますが、ステップが大きすぎると、出会いを見逃す可能性があります。
検索スペースを減らすのに役立つ共焦点円錐形状の特性はありますか? または、実質的に円錐経路に沿って移動する点と、焦点を共有する楕円に沿って移動する円との間の遭遇/衝突を予測する他の方法はありますか。