Gravitasi Planet 2D

15

Saya mencoba membuat game sederhana di mana pesawat ruang angkasa diluncurkan dan kemudian jalurnya dipengaruhi oleh gravitasi planet.

Mirip dengan game ini: http://sciencenetlinks.com/interactives/gravity.html

Saya ingin tahu bagaimana cara meniru efek planet terhadap pesawat ruang angkasa dalam game ini sehingga pesawat ruang angkasa dapat 'berputar' di sekitar planet untuk mengubah arah.

Saya telah berhasil mencapai beberapa hasil palsu di mana pesawat ruang angkasa loop di elips besar di sekitar planet ini atau hanya sedikit dipengaruhi oleh gravitasi planet menggunakan Vektor.

Terima kasih sebelumnya.

ps Saya punya banyak pengalaman coding tidak ada hubungannya dengan game dev.

dipanggang
sumber

Jawaban:

15

Dalam kasus Anda ada pesawat ruang angkasa, yang bergerak dipengaruhi oleh gravitasi semua planet. Setiap planet menerapkan gaya yang sama dengan 'm1 * m2 / r ^ 2' di mana m1 dan m2 mewakili massa pesawat ruang angkasa dan planet, dan r sama dengan jarak euclidean planet dan kapal ruang angkasa. Anda hanya perlu menghitung jumlah semua kekuatan yang diterapkan pada kapal. dari aturan newton kita tahu 'f = m * a' di mana f adalah kekuatan total yang diterapkan pada suatu objek, m adalah massa dan a adalah akselerasi. dari titik ini Anda dapat membaca halaman ini untuk mempelajari cara menggunakan akselerasi untuk menghitung kecepatan dan posisi dari waktu ke waktu.

Ali1S232
sumber
+1 Sumber daya bagus yang Anda tautkan, yang menjelaskan metode integrasi Runge-Kutta ke-4 dan semuanya.
David Gouveia
Masalah saya saat ini adalah jalur yang ditempuh pesawat ruang angkasa. Saya membutuhkannya untuk lebih 'seperti permainan'. Saya telah membuat gambar sederhana untuk menunjukkan apa yang saya maksud. i44.tinypic.com/2w2kdo4.jpg A adalah apa yang saya miliki sekarang, B adalah apa yang saya inginkan.
dipanggang
@baked: dan meningkatkan massa planet tidak akan berhasil?
Jesse Emond
5
Selain artikel Gaffer tentang Game, Anda benar-benar harus membaca artikel Codeflow ini ! Runge-Kutta tidak terlihat sebagai taruhan terbaik Anda di sini.
sam hocevar
Jika Anda memiliki A dan ingin B, bagaimana dengan mengurangi kecepatan awal pesawat ruang angkasa Anda?
Ben
4

Setiap planet harus memiliki medan gravitasi yang menarik benda apa pun di sekitarnya menuju pusatnya. Dengan kata lain, Anda harus menerapkan gaya dari posisi pesawat ruang angkasa ke pusat planet setiap langkah simulasi.

Gaya ini tergantung pada massa kedua objek, tetapi dalam kasus ini, karena massa pesawat ruang angkasa mungkin tidak signifikan dibandingkan dengan planet, Anda bisa saja mencoba konstanta yang berbeda tergantung pada ukuran planet sampai Anda merasa benar.

Yang paling penting, kekuatan ini semakin lemah semakin besar jarak antara kedua benda. Anda akan melakukan ini dengan membagi dengan jarak kuadrat antara keduanya. Setelah jarak tertentu Anda mungkin ingin memotong secara "manual" dan berhenti menerapkan gaya.

Cukup terjemahkan gaya ini menjadi akselerasi, dan persamaan fisik dasar harus mengatur sisanya.

Dalam pseudocode

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship
David Gouveia
sumber
Ini sebenarnya sangat mirip dengan bagaimana saya melakukannya saat ini. Mungkin hanya masalah bermain dengan konstanta?
dipanggang
2
Tidak yakin benar tapi saya akan mengatakan itu mungkin hanya tweaker sekarang. Dan saya pikir itu juga tergantung pada kekuatan awal yang Anda terapkan ke pesawat ruang angkasa untuk membawanya ke orbit.
David Gouveia