Penyelesaian Tabrakan Benda Tegar 2D
Definisi masalah
- Mulai dari Mario menginjak awan hingga dua mobil bertabrakan dalam game balap, menangani tabrakan merupakan bagian yang sangat penting di sebagian besar video game.
- Seri blog ini akan membahas matematika dan fisika nyata di balik simulasi fisika.
- Video game adalah cara yang bagus untuk memberi konteks pada konsep-konsep ini dan membuatnya terasa kurang abstrak.
Sedikit tentang matematika
- Artikel ini memuat cukup banyak matematika, tetapi disarankan untuk tidak merasa gentar karenanya.
- Notasi matematika mungkin terlihat rumit, tetapi sebagian besar hanyalah aritmetika sederhana.
- Disarankan untuk tidak takut pada matematika dan mencobanya.
Sebelum memulai
Benda tegar
- Fisika benda tegar adalah simulasi fisika yang menangani objek yang tidak mengalami deformasi.
- Dalam kenyataannya, semua benda mengalami deformasi pada tingkat molekuler, tetapi dalam simulasi hal ini disederhanakan dan diperlakukan sebagai benda tegar.
Deteksi tabrakan dan penyelesaian tabrakan
- Deteksi tabrakan adalah proses untuk memeriksa objek mana di dalam adegan yang saling bertabrakan.
- Penyelesaian tabrakan adalah proses untuk menentukan bagaimana objek yang bertabrakan harus bergerak.
- Seri blog ini akan berfokus pada tahap penyelesaian tabrakan.
Apa yang ingin kita lakukan?
- Sebagian besar game berjalan di dalam sebuah loop besar.
- Pada setiap iterasi game loop, posisi objek diperbarui sesuai kecepatan saat ini.
- Kecepatan adalah vektor yang memiliki besar dan arah.
Kecepatan
- Kecepatan merepresentasikan perubahan posisi suatu objek selama selang waktu tertentu.
- Posisi baru objek dihitung dengan menambahkan perpindahan, yaitu hasil perkalian kecepatan saat ini dengan selang waktu.
Penyelesaian tabrakan
- Tujuan penyelesaian tabrakan adalah mengubah kecepatan objek setelah tabrakan agar objek tidak lagi saling menembus.
- Kecepatan setelah tabrakan dapat dinyatakan sebagai jumlah dari kecepatan sebelum tabrakan dan perubahan kecepatan akibat tabrakan.
Apa itu tabrakan?
- Untuk memastikan apakah dua objek sedang bertabrakan, dua syarat berikut harus terpenuhi:
- Bentuk geometris objek harus saling bersentuhan atau bertumpang tindih.
- Objek masih harus bergerak menuju tabrakan.
Normal permukaan
- Untuk memindahkan objek sejauh mungkin dari permukaan, objek harus dipindahkan ke arah yang tegak lurus terhadap permukaan.
- Arah ini disebut arah normal, yaitu arah yang tegak lurus terhadap permukaan.
Dot product
- Untuk menghitung sejauh mana dua vektor menunjuk ke arah yang sama, digunakan dot product.
- Dot product didefinisikan sebagai jumlah hasil kali elemen-elemen yang bersesuaian dari dua vektor.
- Dari tanda dot product, kita dapat mengetahui apakah dua vektor searah atau berlawanan arah.
Kesimpulan
- Tabrakan terjadi ketika sebuah titik pada satu objek bersentuhan dengan titik pada objek lain dan kecepatan normal relatif bernilai negatif.
- Artikel berikutnya akan membahas fisika nyata dari tabrakan.
Opini GN⁺
- Pentingnya simulasi fisika: Dalam pengembangan game, simulasi fisika adalah elemen penting untuk meningkatkan kesan realistis.
- Peran matematika: Matematika adalah inti dari simulasi fisika, dan memahaminya memungkinkan kita membuat simulasi yang lebih baik.
- Kompleksitas penyelesaian tabrakan: Penyelesaian tabrakan adalah proses yang lebih kompleks daripada sekadar memperbarui posisi objek.
- Nilai edukatif: Artikel ini sangat membantu untuk memahami dasar-dasar simulasi fisika.
- Pembelajaran lanjutan: Mencoba mengimplementasikan physics engine secara langsung juga merupakan cara belajar yang baik. Anda dapat merujuk pada physics engine open source seperti Box2D atau Chipmunk.
1 komentar
Opini Hacker News
Ringkasan kumpulan komentar Hacker News
Hey everyone, author here!
Oh! Look, a well-researched, deeply-explained, and interactive post.
One side project I am working on right now is a 2d space shooter I am developing with my son.
I always enjoyed the explanation from the N game: N game tutorial
I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.
This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!
Collisions are violations of the pairwise non-intersection constraint between bodies.
If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post
To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games
Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.