Inilah cara Anda melakukannya:
Perkiraan gerakan
Setiap objek fisika membutuhkan vektor-vektor ini:
- Posisi : Di mana objek berada.
- Kecepatan : Bagaimana posisinya berubah.
- Akselerasi : Bagaimana kecepatannya berubah.
Jadi, secara intuitif, Anda perlu melakukan hal semacam ini setiap frame ke setiap objek fisika a
:
a.speed += a.acceleration
a.position += a.speed
Jebakan : Ini dikenal sebagai metode integrasi Euler . Perkiraan ini lebih baik untuk kecepatan dan akselerasi kecil dan dengan langkah waktu yang kecil. Dalam permainan, ini biasanya benar. Tetapi jika suatu benda bergerak sangat cepat menuju dinding tipis atau langsung menuju benda bergerak lain, benda itu dapat melewati tabrakan dengan benda itu ketika posisinya bertambah dengan jumlah yang cukup besar untuk melewatinya seluruhnya. Jika Anda memiliki objek yang bergerak cepat, Anda mungkin perlu Deteksi Tabrakan Berkesinambungan untuk lolos dari ini.
Tabrakan
Tabrakan dapat diperkirakan dengan urutan semacam ini:
- Deteksi : Terdeteksi bahwa dua tubuh berpotongan.
- Resolusi : Posisi masing-masing badan diubah sehingga mereka tidak lagi berpotongan.
- Fisika : Kecepatan setiap tubuh diubah untuk memperhitungkan momentum, gesekan, dan pemulihan (bounciness).
Ini dikenal sebagai Deteksi Tabrakan Terpisah, seperti yang terjadi pada titik-titik diskrit dalam waktu. Setiap langkah patut mendapat perhatian:
Langkah 1: Deteksi tabrakan (Apakah ada yang bertabrakan?)
Untuk dua lingkaran : Cukup periksa apakah pusat mereka lebih dari jumlah jari-jari mereka.
Untuk dua persegi panjang : Periksa apakah ada salah satu koordinat sudut mereka dalam persegi panjang lainnya.
Untuk apa pun yang melibatkan poligon yang lebih kompleks , Anda membutuhkan Teorema Pemisah , yang merupakan topik untuk pertanyaan lain.
Jebakan : Ada banyak jenis tumbukan lainnya yang mungkin ingin Anda pertimbangkan. Beberapa sangat kompleks: Poligon cembung mungkin berpotongan beberapa kali !
Langkah 2: Resolusi tabrakan (Pisahkan keduanya)
Metode sederhana untuk menyelesaikan tabrakan adalah terjemahan dengan penetrasi minimum , menggunakan nilai yang diperoleh dari deteksi tabrakan. Ini pada dasarnya melibatkan memindahkan objek secara terpisah dengan jarak gerakan seminimal mungkin.
Sebagai contoh, perhatikan tumbukan lingkaran-lingkaran di mana salah satu lingkaran diperbaiki di tempatnya. Vektor perpindahan minimum memiliki arah yang sama dengan perbedaan antara vektor titik tengahnya. Panjangnya adalah perbedaan antara jumlah jari-jari mereka dan jarak antara pusat.
Gagasan ini dengan mudah digeneralisasikan ke bentuk lain.
Jebakan : Jika kedua benda yang bertabrakan dapat dipindah, Anda mungkin harus memindahkan keduanya dengan sebagian kecil dari keseluruhan jarak untuk mendapatkan perkiraan gerakan mereka yang dapat dipercaya. Mereka jelas harus bergerak ke arah yang berbeda.
Langkah 3: Fisika tabrakan (Perubahan lainnya.)
Hal yang paling jelas yang cenderung terjadi adalah bahwa satu atau dua objek berubah arah yaitu memutar vektor kecepatannya. Ini cukup mudah diimplementasikan.
Jebakan : Objek mungkin elastis , tetapi mungkin tidak , dalam hal ini total energi dalam sistem berkurang. Anda mungkin perlu tarik karena hambatan udara. Gesekan (terutama gesekan statis ) terkenal rumit untuk diterapkan .
Beberapa kesimpulan
Simulasi realitas secara eksponensial lebih sulit jika ingin disimulasikan. Anda sedang berjalan ke ladang ranjau kasus-kasus tepi yang tak terhitung jumlahnya, formula yang sulit diingat dan tumpukan makalah penelitian yang terus tumbuh.
Jika kebutuhan Anda sederhana atau Anda ingin mempelajarinya, cobalah.
Jika kebutuhan Anda rumit atau Anda tidak menyukai matematika, dapatkan mesin fisika untuk menyelami detail untuk Anda. Box2D dan Bullet cukup populer di gim.