2D惑星重力


15

私は、宇宙船が発射され、その経路が惑星の重力によって影響される単純なゲームを作ろうとしています。

このゲームに似ています:http : //sciencenetlinks.com/interactives/gravity.html

このゲームで惑星が宇宙船に与える影響を再現する方法を知りたいので、宇宙船が惑星の周りをループして方向を変えることができます。

私は、宇宙船が惑星の周りの巨大な楕円でループするか、ベクトルを使用して惑星の重力の影響をわずかしか受けないという偽の結果を達成することができました。

前もって感謝します。

PSゲーム開発者とは関係のないコーディング経験が豊富にあります。

回答:


15

あなたの場合、すべての惑星の重力の影響を受ける宇宙船があります。各惑星は 'm1 * m2 / r ^ 2'に等しい力を適用します。m1とm2は宇宙船と惑星の質量を表し、rは惑星と宇宙船のユークリッド距離に等しくなります。船に加えられたすべての力の合計を計算する必要があります。ニュートンのルールから、「f = m * a」がわかります。ここで、fはオブジェクトに加えられる総力、mは質量、aは加速度です。この時点から、このページを読んで加速度を使用して速度と位置を経時的に計算する方法を学ぶことができます。


+1リンクした素敵なリソース。4次のRunge-Kutta統合方法とすべてを説明しています。
デヴィッドゴーベイア

現時点での私の問題は、宇宙船が進む道です。もっと「ゲームのよう」にする必要があります。私が意味することを示す簡単な写真を作りました。i44.tinypic.com/2w2kdo4.jpg Aは私が今持っているもの、Bは私が欲しいものです。
焼き

@baked:そして、惑星の質量を増やしてもうまくいかないでしょうか?
ジェシーエモンド

5
ゲームに関するGafferの記事に加えて、このCodeflowの記事を必ず読む必要があります!ここでは、ルンゲクッタはあなたの最善の策のように見えませ
サムホセバー

Aがあり、Bが必要な場合、宇宙船の初速を下げるのはどうですか
ベン

4

各惑星には、その近くにある物体を中心に向かって引っ張る重力場が必要です。つまり、シミュレーションの各ステップで、宇宙船の位置から惑星の中心に力を加える必要があります。

この力は両方のオブジェクトの質量に依存しますが、この場合、宇宙船の質量はおそらく惑星の質量に比べて重要ではないので、気分が良くなるまで惑星のサイズに応じて異なる定数を試すことができます。

最も重要なことは、この力は両方のオブジェクト間の距離が大きくなるほど弱くなることです。これを行うには、両方の距離の2乗で除算します。一定の距離の後、「手動で」カットオフして、力の適用を停止することができます。

この力を加速度に変換するだけで、基本的な物理方程式が残りを処理します。

擬似コードで

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

これは実際、私が現在行っている方法と非常によく似ています。たぶんそれは定数で遊ぶだけの問題でしょうか?
焼き

2
確かではありませんが、おそらく今は微調整しているだけでしょう。また、宇宙船を軌道に乗せるために宇宙船にかける最初の力にも依存すると思います。
デヴィッドゴーベイア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.