2016-06-29 9 views
1

私はパイゲームで何らかの太陽系を作りたいと思っています。私は固定式をやったけど、太陽や惑星の周りを回って惑星を動かすのは面白いだろうと思った。できるだけファイアーゲームを使ってできることはあるのだろうか?私が望む何Pygameは円を回って別のものを回る

は次のとおりです。

Sun = pygame.draw.circle(...) 
planet1 = pygame.draw.circle(...) 
etc. 

a = [planet1, planet2, ...] 

for p in a: 
    move p[2] to pos(x, y) 

私が仕事だと思うものですが、私はそれを行うかどうかはわかりませんこと。また、私は古代惑星を削除してその隣に新しい惑星を描くことを考えましたが、問題は色、太陽までの距離、システム内の惑星の数などのランダムな特徴を使用していることですこれらの同じ機能を維持する必要があります。何か案は?

ありがとうございます! rが太陽までの距離であるenter image description hereは、惑星の

答えて

0

座標がX軸に対してある角度を介して太陽の周りを回転され、thetaその角、(a, b)は、太陽の座標です。円を中心に(x, y)を描く。

EDIT: 一般楕円軌道:

enter image description here

r0

が同じ角運動量を有する円形軌道の半径であり、そしてeが「偏心ある

enter image description here

楕円の "

+0

ありがとうございます!実際には、楕円軌道を取ることが望ましいと言えますが、あまりにも混乱しても心配はありません。この公式は惑星を動かすだろうか? – Sionae

+0

@sionaeすべてのループで「theta」を更新する場合 –

1

ニュートンのユニバーサル重力法則とニュートンの第2法則を使って重力を実装して、惑星の加速を得ることができます。各惑星に初期位置、速度、質量を与えます。加速度は速度a = v * dtの変化、速度は位置v = r * dtの変化であるので、速度と位置を見つけるために積分することができます。

ユニバーサル重力F = G * m1 * m2/r ** 2Fが物体にかかる力の大きさ、Gは重力定数であり、m1m2は、オブジェクトの質量であり、rは、2つのオブジェクト間の距離です。

ニュートンの第2法則F = m1 * aここで、aは加速度です。

dt = 0.01 # size of time step 
G = 100 # gravitational constant 

def calcGravity(sun, planet): 
    'Returns acceleration of planet with respect to the sun' 
    diff_x = sun.x - planet.x 
    diff_y = sun.y - planet.y 
    acceleration = G * sun.mass/(diff_x ** 2 + diff_y ** 2) 
    accel_x = acceleration * diff_x/(diff_x ** 2 + diff_y ** 2) 
    accel_y = acceleration * diff_y/(diff_x ** 2 + diff_y ** 2) 
    return accel_x, accel_y 

while True: 
    # update position based on velocity 
    planet.x += planet.vel_x * dt 
    planet.y += planet.vel_y * dt 

    # update velocity based on acceleration 
    accel_x, accel_y = calcGravity(sun, planet) 
    planet.vel_x += accel_x * dt 
    planet.vel_y += accel_y * dt 

これは、円形と楕円軌道を生成することができます。周回する月を作成するには、数値積分のための非常に小さなタイムステップ(dt)が必要です。

注:数値積分の限界のため、このアプローチは微妙に不正確です。

ここでは、太陽、月、基本的な軌道移動の周りを回転する3つの惑星を含むパイゲームの実装例を示します。 https://github.com/c2huc2hu/orbital_mechanics

+0

ありがとうございました!惑星の速度は、太陽との距離、質量の距離に依存しますか?また、どのように正確にパイゲームの方向に向かって動きを実装することができますか(私は初心者です、叫ばないでください^^)。非常に便利ですが、ありがとう。 – Sionae

+0

ええ、惑星が太陽に近いほど、軌道は速くなります(ケプラーの第2法を参照)。惑星の質量は速度に影響しません(質量はニュートンの第2法則によって相殺されるため)。太陽の質量は、同じ軌道を維持するのに必要な速度に影響します。重くなるということは、より速く進む必要があることを意味します。これらは共に万有引力の結果である。私は自分の応答を編集して、速度の実装についてさらに詳しく説明します。 – user3080953

関連する問題