15

ゲーム用の 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 物理エンジンは、代わりに剛体構造に重点を置いています。誰か私が見ることができるものを提案できますか?)

4

2 に答える 2

10

デルタ t 反復時間値が十分に小さいことを確認する必要があります。期待どおりの動作を得るには、間違いなく定数をいじる必要があります。あなたのケースとほとんどのケースでの反復シミュレーションは、エラーが急速かつ予測不可能に蓄積する統合の形式です。

于 2010-10-27T23:40:12.613 に答える
3

はい、これらの方程式は2D空間にも当てはまります。これは、2D空間が3D世界の単なる2D表現であるためです。(「実際の」2Dユニバースにはさまざまな方程式がありますが、ここでは関係ありません。)

ロングショット:おそらく、惑星の表面までの距離をrとして使用していますか?

そうでない場合は、時間ステップを半分に減らしてみてください。それが大きな違いを生む場合は、動作が変化しなくなるまでそれを減らし続けます。

それでも違いがない場合は、初速度をゼロに設定してから、数回の反復で落下するのを観察し、加速度を測定してGM /r2かどうかを確認してください。それでも答えが明確でない場合は、結果を投稿してください。それを把握しようとします。

于 2010-10-28T12:27:46.153 に答える