ケプラー軌道:時間の経過とともに軌道上の位置を取得


8

スペースシミュレーション関連のゲームを開発しています。次のように、バイナリスターの動きを実装するのに問題があります。

連星

2つの星は重心を周回し、軌道は楕円形です。

基本的に、任意の位置での角速度を決定する方法は知っていますが、経時的な角速度は知りません。したがって、与えられた角度で、星の位置を非常に簡単に計算できます(http://en.wikipedia.org/wiki/Orbit_equationを参照)。

時間をかけて星の位置を取得したいと思います。楕円のパラメトリック方程式は機能しますが、正しい速度が得られません { X(t) = a×cos(t) ; Y(t) = b×sin(t) }

それは可能ですか、どのように行うことができますか?


これは、かなり単純な重力をシミュレートすることで実行できます(質量* sqrt(距離)に依存する力を追加し、単純な物理
演算

7
いいえ、単純な物理演算を実行しないでください!軌道は数値的に不安定であり、すべてが爆破または爆発します。
JonasBötel11年

回答:



0

上記の便利なアニメーションを作成するのに十分なデータがあるようです。シミュレーションには、私のソリューションで提供されるよりも高い精度が必要になる場合があります。

上記のアニメーションの各フレームについて、各星の中心のピクセル位置を記録します。これらの値をプログラムの2つの配列に入力します。所定の時間tについて、各配列で対応する4つの連続したエントリを見つけ、それらに双三次フィルターを実行して、各星の位置を生成します。


実際には、アニメーションはウィキペディアからです。
Artefact2 2011

0

数値積分が最も簡単な方法であることがわかりました。逆二乗則(F = GM / r ^ 2)はかなりうまく機能します。また、RK4と呼ばれることが多いRunge Kuttaオーダー4は、実装が簡単で、静かに動作します。たとえば、2D空間の1つのオブジェクトに対して、1次の時間微分をとるルーチンを書くことから始めます。XとYの座標、XとYの速度があります。出力は時間微分であり、位置の時間微分は単に速度なので、その半分は値をコピーするだけであり、加速度は重力の引力にすぎません。次に、Runge Kuttaの処方に従います。1つのタイムステップの誤差は、タイムステップの5乗に比例します。時間ステップを調整して、結果を十分に正確にします。数値積分の利点の1つは、システムをいじって面白くしたい場合です。


ええ、はい、これは解決策ですが、私のプログラムはリアルタイムの物理シミュレーションではありません。それは離散的であり、どこでもすべてを更新することはできません。これが、時間の関数としての位置が適切な理由です。位置を更新する頻度に関係なく、常に正確に計算する必要はありません。
Artefact2 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.