Bagaimana saya bisa memfaktorkan momentum ke dalam ruang sim saya?


8

Saya mencoba membuat mesin fisika 2d sederhana saat ini, dan saya mengalami beberapa masalah mencari tahu bagaimana memasukkan momentum ke dalam pergerakan pesawat ruang angkasa.

Jika saya bergerak ke arah tertentu pada kecepatan tertentu, saya saat ini dapat memperbarui posisi kapal saya dengan mudah (Posisi + = Arah * Kecepatan). Namun, jika kapal berputar sama sekali, dan saya menghitung ulang arah (berdasarkan sudut baru yang dihadapi kapal), dan mempercepat ke arah itu, bagaimana saya bisa memperhitungkan momentum untuk mengubah "garis" yang dilalui kapal? Saat ini kapal berubah arah secara instan dan berlanjut pada kecepatan saat ini di arah baru ketika saya menekan tombol dorong. Saya ingin ini menjadi gerakan memutar yang lebih bertahap sehingga memberi kesan bahwa kapal itu sendiri memiliki massa.

Jika sudah ada posting bagus tentang topik ini saya minta maaf, tetapi tidak ada yang muncul dalam pencarian saya. Beri tahu saya jika ada informasi lain yang diperlukan, tetapi saya berharap seseorang dapat dengan mudah memberi tahu saya bagaimana saya dapat melemparkan kecepatan * massa ke pembaruan lingkaran permainan saya.


Jika Anda mencari lebih seperti cara memprogram gerak, Anda mungkin ingin melihat Transcendence permainan gratis, penembak ruang 2d lain yang menggunakannya. Mungkin Anda dapat melihat skripnya atau bertanya kepada pengembang bagaimana mereka melakukannya
Mastersteviekun

Jawaban:


7

Sepertinya Anda memiliki Posisi dan Arah sebagai vektor dan Kecepatan sebagai skalar?

Jika demikian, ubah Velocity menjadi vektor juga dan kemudian lakukan sesuatu seperti ini:

Force = Direction * Power
Acceleration = Force / Mass
Velocity += Acceleration * ElapsedTime
Position += Velocity * ElapsedTime

Arah menjadi vektor satuan panjang yang memberikan judul kapal Anda. Daya menjadi jumlah dorongan yang ingin Anda tambahkan (Nol saat tidak diperlukan akselerasi) ElapsedTime adalah waktu di antara permainan Anda Perbarui panggilan untuk menjaga gerakan tetap lancar bahkan ketika framerate Anda berubah

Jika Anda ingin tahu lebih banyak tentangnya, Anda dapat melihat Integrasi Euler


1
Yap dan langkah selanjutnya adalah memodelkan Hukum Newton F = m * a. Jadi alih-alih menggunakan konstanta "Daya" untuk mendapatkan akselerasi, Anda menggunakan Acceleration = Force / mass. Jadi, ketika Anda menerapkan dorong, Anda menerapkannya sebagai vektor gaya. Melakukan ini akan memungkinkan Anda untuk menerapkan gaya lain ke pesawat ruang angkasa Anda dengan mudah dengan menambahkan semua vektor gaya bersama-sama dan menghitung akselerasi yang sesuai. Juga berarti Anda dapat bermain dengan Massa sebagai variabel terpisah.
TerryB

Terry benar, saya lupa memasukkan itu dalam posting asli saya.
Tn. Bell

Terima kasih Pak Bell / Terry. Kedua persamaan yang tercantum di atas membantu saya melakukan ini secara terprogram. Saya mengalami banyak kesulitan memahami bagaimana ini akan berhasil mencoba menggunakan pelampung di semua tempat. Setelah mengalihkan semuanya kecuali massa ke vektor (terima kasih kepada leftium di atas), saya akhirnya bisa bekerja.
Josh Petite

8

Alih-alih memanipulasi kecepatan secara langsung, tambahkan variabel lain: akselerasi , yang lambat laun mengubah kecepatan :

Dari fisika klasik ( hukum gerak Newton ):

a =  F/m  // a Force will result in a smaller acceleration on objects with more mass
v += a    // acceleration is the rate of change in velocity
p += v    // velocity is the rate of change in position    

dimana:

a = acceleration, v = velocity, p = position
F = force, m = mass

(Catatan m adalah satu-satunya nilai skalar; F, a, v, dan p adalah semua vektor 2D atau 3D)

Juga, sebenarnya ada dua arah:

  1. Arah yang dihadapi kapal. Gaya dari engine diterapkan sepanjang vektor ini.
  2. Arah kapal sebenarnya bergerak (karena momentum). Ini adalah vektor kecepatan v.

Saya menjawab pertanyaan terkait pada StackOverflow: 2D pergerakan angkasa Spaceship . Ada beberapa kode sampel dalam jawaban itu.


Perhatikan bahwa dalam simulasi berbasis centang menggunakan metode itu akan memberi Anda hasil yang salah. Rumus dasarnya benar dalam dunia fisika berkelanjutan, tetapi Anda harus melakukan integrasi numerik untuk mendapatkan hasil yang akurat. Lebih detail di sini: gafferongames.com/game-physics/integration-basics
Tetrad

Akhirnya berhasil. Terima kasih banyak semuanya. Butuh beberapa saat untuk mencari tahu bagaimana menguraikan peristiwa input ini secara bijaksana bersama dengan pembaruan saya (serta memasukkan penggunaan waktu).
Josh Petite
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.