ゲーム用の 2D 物理エンジンに取り組んでいます。単純な反復アプローチを使用して、重力と質量を機能させています (最終的にはアップグレードする必要があることがわかっています)。質量を手動で押して、それらが動くのを見ることができ、すべてが期待どおりに機能します。
現在、惑星の周りの単純な円軌道にある衛星を使用して、事前にゲームの世界を設定しようとしています。これを行うには、惑星の質量と目的の距離を考慮して、衛星の初期速度ベクトルを計算する必要があります。これは些細なことですが、私の人生では正しく機能させることはできません。
標準的な物理学の教科書によると、質量 M の周りの円軌道にある物体の軌道速度は次のとおりです。
v = sqrt( G * M / r )
しかし、適切なベクトルを適用した後、衛星は十分な速さではなく、鋭く楕円軌道に落ちます。ランダムにいじってみると、あるケースでは約 3 倍ずれていることがわかります。
私の重力シミュレーションコードは、伝統的なものを使用しています:
F = G M m / r^2
G は私のユニバースで 1 に設定されています。
これらの方程式が 2D 空間でも成り立つことを誰かが確認できますか? そうでない理由はわかりませんが、この時点で、問題がコードにあるのか、それとも私の仮定にあるのかを本当に知りたいです...
更新:私の物理エンジンは次のように動作します。
for each time step of length t:
reset cumulative forces on each object to 0.
for each unique pair of objects:
calculate force between them due to gravity.
accumulate force to the two objects.
for each object:
calculate velocity change dV for this timestep using Ft / m.
v = v + dV.
calculate position change dS using v * t.
s = s + dS.
(もちろん、必要に応じてベクトルを使用します。)
現在、フレームごとに 1 つの物理ティックを実行しています。これは 1 秒あたり約 500 ~ 700 回発生しています。これによりエラーが非常に急速に蓄積されることは承知していますが、少なくとも開始する必要があります。
(ちなみに、軌道力学を処理する市販の物理エンジンを見つけることができませんでした --- Chipmunk や Box2D などのほとんどの 2D 物理エンジンは、代わりに剛体構造に重点を置いています。誰か私が見ることができるものを提案できますか?)