Jawaban:
Cara paling sederhana adalah integrasi Euler. Anda harus menyimpan vektor posisi dan vektor kecepatan. Di setiap bingkai:
( x untuk skalar, X untuk vektor)
pastikan dt itu kecil ...
| G | sekitar 9,8 m / s² untuk bumi dan sekitar 1,6 m / s² untuk bulan
secara umum, gaya paksaan karena interaksi gravitasi adalah:
Itu mempengaruhi setiap tubuh dan menunjuk ke yang lain.
The G skalar adalah sangat terkenal konstan gravitasi itu adalah tentang 6.67e-011 N (m / Kg) ²
Karena Anda tertarik dengan akselerasi:
Anda hanya perlu mengetahui massa planet (m2) dan radius (r) untuk menghitung akselerasi Anda.
Biasanya akselerasi yang menggerakkan planet menuju pesawat ruang angkasa Anda dapat diabaikan karena biasanya m1 dapat diabaikan dibandingkan dengan m2.
Namun, jika Anda mencoba mendarat di asteroid kecil, Anda mungkin harus menggunakan rumus umum yang menambahkan gaya tersebut ke vektor gaya total pada langkah kedua.
EDIT:
Seperti yang diperlukan beberapa petunjuk tentang implementasi. Anda akan perlu:
Pertama-tama pustaka vektor: gim Anda bisa mono / bi / tree / four ... dimentional, sejauh yang Anda anggap sebagai proyeksi kata 3D, roule fisik akan bertahan.
Jika n adalah dimensi yang Anda pilih (mungkin 2 atau 3 dalam kasus Anda), perpustakaan harus memiliki:
Anda bisa menggunakan perpustakaan yang melakukan ini atau mengimplementasikannya sendiri; vektor dapat berupa struct atau kelas, pilihan ada di tangan Anda.
Setiap mesin harus dijelaskan oleh:
input pengguna Anda akan digunakan untuk memberikan kepada setiap mesin angka yang akan berada antara 0 (mesin yang tidak digunakan) dan 1 (daya penuh): faktor mesin (penggunaan).
Lipat gandakan faktor engine untuk vektor dorongnya untuk mendapatkan kepercayaan mesin yang sesungguhnya dan simpulkan semua hasil dari semua mesin yang tersedia; ini akan memberi Anda F dari langkah kedua.
Faktor mesin Anda dapat digunakan untuk mengetahui penggunaan bahan bakar yang sebenarnya untuk setiap mesin: gandakan faktor mesin dengan penggunaan bahan bakar dan dengan dt untuk mengetahui penggunaan bahan bakar sesaat; Anda dapat kurangi nilai ini dari total variabel kapasitas bahan bakar (ini memberi Anda kesempatan untuk memperbarui massa total Anda m jika massa bahan bakar yang cukup).
Sekarang Anda dapat melanjutkan menggunakan integrasi untuk menghitung posisi baru, periksa tabrakan dengan permukaan planet Anda; jika ada, gunakan panjang vektor kecepatan untuk mengatakan apakah pendaratan itu sukses atau bencana.
Jelas pemeriksaan tabrakan lainnya dapat / harus dilakukan, beberapa entitas permukaan tidak dapat diizinkan sebagai titik pendaratan sehingga setiap tabrakan adalah fatal.
Saya meninggalkan cara mendapatkan input dan cara membuat pesawat ruang angkasa Anda untuk Anda; Anda dapat menggunakan faktor engine untuk merender bingkai status engine demi frame, misalnya.
Karena jawaban lain yang sangat bagus tampaknya sedikit teoretis, inilah versi kode sederhana:
// Position of the lander:
var positionX = 100.0;
var positionY = 100.0;
// Velocity of lander
var velocityX = 0.0;
var velocityY = 0.0;
// Acceleration due to gravity
var gravity = 1.0;
// If the player is pressing the thrust buttons
var isThrusting = false;
var isThrustingLeft = false;
var isThrustingRight = false;
// Thrust acceleration
var thrust = -2.0;
// Vertical position of the ground
var groundY = 200.0;
// Maximum landing velocity
var maxLandingVelocity = 3.00;
onUpdate()
{
velocityY += gravity;
positionX += velocityX;
positionY += velocityY;
if (isThrusting)
{
velocityY += thrust;
}
if (isThrustingLeft)
{
velocityX += thrust;
}
else if (isThrustingRight)
{
velocityX -= thrust;
}
if (positionY >= floorY)
{
if (velocityY > maxLandingVelocity)
{
// crashed!
}
else
{
// landed successfully!
}
}
}
Sayangnya, matematika di sini menjadi berbulu. Jawaban FxIII baik untuk kasus umum benda jatuh tetapi Anda berbicara tentang roket - dan roket membakar bahan bakar.
Saya telah melihat kode yang melakukannya tetapi benar-benar tidak berdokumen dan saya tidak pernah berhasil menghitung matematika di baliknya. Kecuali jika Anda terbatas pada CPU, entah bagaimana, saya tidak akan repot-repot dan cukup memaksakannya - pendekatan FxII diterapkan pada skala waktu yang cukup singkat dan sesuaikan gaya dorong (atau penggunaan bahan bakar jika Anda mengetahui roket melaju mundur saat bahan bakar terbakar untuk mempertahankan percepatan yang ditentukan daripada dorongan yang ditentukan) antara setiap iterasi saat roket membakar bahan bakar.