2D Gezegen Yerçekimi


15

Bir uzay gemisinin başlatıldığı ve daha sonra yolunun gezegenlerin yerçekiminden etkilendiği basit bir oyun yapmaya çalışıyorum.

Bu oyuna benzer: http://sciencenetlinks.com/interactives/gravity.html

Bu oyunda gezegenlerin uzay gemisi üzerindeki etkisini nasıl kopyalayacağımı bilmek istiyorum, böylece bir uzay gemisi yönünü değiştirmek için bir gezegenin etrafında 'döngü' yapabilir.

Uzay gemisinin gezegenin etrafında büyük bir elips içinde dolaştığı veya Vektörler kullanarak bir gezegenin yerçekiminden sadece biraz etkilendiği bazı sahte sonuçlar elde etmeyi başardım.

Şimdiden teşekkürler.

ps Ben sadece oyun dev ile ilgisi kodlama deneyimi bol var.

Yanıtlar:


15

Sizin durumunuzda, tüm gezegenlerin yerçekiminden etkilenen hareket eden bir uzay gemisi var. Her gezegen, m1 ve m2'nin uzay gemisi ve gezegenin kütlelerini temsil ettiği 'm1 * m2 / r ^ 2' ye eşit kuvvet uygular ve r, gezegen ve uzay gemisinin öklid mesafesine eşittir. gemiye uygulanan tüm kuvvetlerin toplamını hesaplamanız yeterlidir. newton kurallarından biliyoruz ki 'f = m * a', burada f bir nesneye uygulanan toplam kuvvettir, m kütle ve a ivmesidir. bu noktadan itibaren hız ve pozisyonun zaman içindeki konumunu hesaplamak için ivmeyi nasıl kullanacağınızı öğrenmek için bu sayfayı okuyabilirsiniz .


+1 Bağlantılı güzel kaynak, 4. dereceden Runge-Kutta entegrasyon yöntemini ve her şeyi açıklıyor.
David Gouveia

Benim sorunum şu anda uzay gemisinin izlediği yol. Daha 'oyun benzeri' olması lazım. Ne demek istediğimi göstermek için basit bir resim yaptım. i44.tinypic.com/2w2kdo4.jpg Şimdi sahip olduğum şey, B istediğim şey.
pişmiş

@baked: ve gezegenin kütlesini artırmak işe yaramaz mı?
Jesse Emond

5
Gaffer on Games makalesine ek olarak kesinlikle bu Codeflow makalesini de okumalısınız ! Runge-Kutta yok değil burada iyi bahis gibi görünüyor.
sam hocevar

A'nız varsa ve B istiyorsanız, uzay geminizin başlangıç ​​hızını azaltmaya ne dersiniz?
Ben

4

Her gezegen, çevresindeki herhangi bir nesneyi merkezine doğru çeken yerçekimi alanına sahip olmalıdır. Başka bir deyişle, simülasyonun her adımında uzay gemisinin konumundan gezegenin merkezine bir kuvvet uygulamalısınız.

Bu kuvvet her iki nesnenin kütlesine bağlıdır, ancak bu durumda, uzay gemisinin kütlesi gezegeninkine kıyasla muhtemelen önemsiz olduğundan, doğru hissetene kadar gezegenin büyüklüğüne bağlı olarak farklı sabitleri deneyebilirsiniz.

En önemlisi, bu kuvvet her iki nesne arasındaki mesafe ne kadar büyük olursa zayıflar. Bunu, her ikisi arasındaki kare mesafeye bölerek yapacaksınız. Belli bir mesafeden sonra kesimi "manuel olarak" yapmak ve kuvveti uygulamayı bırakmak isteyebilirsiniz.

Bu kuvveti bir ivme haline getirin ve temel fizik denklemleri geri kalanıyla ilgilenmelidir.

Sahte kodda

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

Bu aslında şu anda nasıl yaptığımla oldukça benzer. Belki de sadece sabitlerle oynamak meselesi?
pişmiş

2
Gerçekten emin değilim ama muhtemelen sadece tweaking olduğunu söyleyebilirim. Ve ayrıca uzay gemisine yörüngeye girmesi için uyguladığınız ilk kuvvete de bağlı olduğunu düşünüyorum.
David Gouveia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.