Bagaimana cara mengatasi tabrakan bentuk majemuk menggunakan SAT?


16

SAT adalah cara yang layak untuk menentukan tabrakan antara poligon cembung acak Anda bahkan akan mendapatkan vektor yang diperlukan untuk menyelesaikan tabrakan.

Untuk menyelesaikan tabrakan antara bentuk kompleks (non-cembung), saya berpikir tentang semacam senyawa-bentuk yang terdiri dari beberapa poligon cembung. Jika tumbukan terjadi pada fase-luas (mis. Lingkaran vs. lingkaran atau AABB vs AABB), tumbukan akan diselesaikan dengan memeriksa setiap poligon dalam bentuk senyawa vs setiap poligon dalam bentuk senyawa lainnya.

Saya bertanya-tanya apa cara terbaik untuk benar-benar memisahkan benda? Pendekatan naif adalah mengambil vektor dengan magnitudo tertinggi dan menggunakannya untuk pemisahan. Dalam gambar berikut, ini akan menjadi V 2

Contoh SAT 1

Namun jika vektor pemisah menunjuk ke arah yang berbeda, tabrakan tidak dapat diselesaikan segera dan mungkin memerlukan beberapa iterasi. Jadi pada gambar berikutnya kita akan memisahkan menggunakan V 1 dan dalam iterasi lain oleh V 2 (atau sesuatu yang dekat dengan V 2 , karena bentuknya akan bergerak dengan jumlah V 1 ).

Contoh SAT 2

Pendekatan ini akan gagal dengan memisahkan vektor yang mengarah ke arah yang berlawanan satu sama lain atau dalam kasus seperti yang ditunjukkan pada gambar berikut:

Contoh SAT 3

Di sini kita akan beralih tanpa akhir antara negara di sebelah kiri dan negara di sebelah kanan.

Jadi untuk mengajukan pertanyaan aktual di sini: Apa pendekatan yang masuk akal untuk masalah ini? Saya kira menggunakan poligon majemuk untuk bentuk kompleks adalah ide yang masuk akal tapi saya benar-benar bertanya-tanya bagaimana tabrakan harus diselesaikan dalam kasus itu? Bagaimana cara mendeteksi jalan buntu seperti yang ditunjukkan pada gambar ketiga?


Bisakah Anda menjelaskan untuk apa Anda ingin menggunakan vektor?
Will

@Will Vektor harus digunakan untuk menyelesaikan tabrakan, sehingga bentuk tidak lagi tumpang tindih. Jadi saya bisa memindahkan objek kuning dengan vektor yang dihasilkan dan dua objek tidak lagi bertabrakan.
bummzack

Jawaban:


7

Saya pikir Anda mungkin mencoba memasukkan kunci persegi ke dalam lubang bundar dengan menerapkan SAT seperti Anda, di sini. Jelas, itu tidak dirancang untuk tabrakan cekung-cekung, dan meskipun saya memuji upaya Anda untuk mengadaptasinya untuk tujuan itu, ada beberapa pertimbangan yang membuat ini tidak mungkin berhasil.

Realisme

Impuls sudut dan efek knock-on adalah nama permainan di sini.

Urutan titik kontak penting untuk resolusi tabrakan yang realistis. Di dunia nyata, salah satu poin itu akan selalu menyerang sebelum yang lain. Dan itu hanya dalam meniru urutan kontak dan hasil dari setiap "subkolisi" diwakili oleh itu, bahwa Anda dapat mengharapkan untuk mendapatkan hasil yang realistis dalam simulasi. Ini adalah salah satu alasan mengapa Anda memecah cekung Anda menjadi cembung, di tempat pertama - ini memungkinkan pendeteksian bagian mana yang pertama kali menyerang. Tentu saja, ini juga dapat ditiru sesuai komentar saya di bawah judul "Kurang realisme".

Perlengkapan cembung Anda bergabung untuk memberikan objek baik garis luar dan pusat massa (dan tentu saja dalam simulasi yang lebih kompleks, setiap fixture dapat memengaruhi kepadatan berbeda, juga). Alasan saya menyebutkan ini adalah bahwa dalam menyelesaikan tabrakan secara realistis, Anda harus menghitung tidak hanya linear tetapi juga impuls sudut, mengikuti setiap "sub-tabrakan" dari titik kontak Anda. Ini tidak sesederhana "push apart" dasar yang Anda terapkan dengan SAT.

Ini kemudian benar-benar mengubah sifat masalah Anda, karena seperti yang Anda lihat, tidak ada gunanya mendapatkan dan mencoba menggunakan 2 atau lebih titik kontak, karena sebenarnya itu hanya yang pertama yang penting. Setelah Anda menyelesaikan yang pertama dalam hal impuls linier dan sudut, Anda perlu menghitung ulang untuk tabrakan lebih lanjut, karena orientasi setiap objek akan berubah. Lebih jauh dari itu, mendeteksi setiap kontak individu dalam langkah kemudian mungkin atau mungkin tidak perlu dilakukan dalam langkah yang sama - tergantung pada waktu antara kontak sebagai titik kontak pertama objek menyentuh, selanjutnya impuls linier dan sudut diterapkan, kedua menyentuh titik kontak, dan sebagainya.

Kurang realisme

Tentu saja, dengan asumsi Anda sama sekali tidak tertarik untuk menyelesaikan impuls sudut, maka yang terbaik yang dapat Anda lakukan dengan SAT pada dasarnya adalah apa yang akan Anda lakukan jika Anda membungkus poligon ini sebagai cembung menggunakan sesuatu seperti Pemindaian Graham: Mendesak terpisah oleh pemisah tunggal vektor. Dengan kata lain, tidak masuk akal untuk mencoba menyelesaikan tiga vektor bersama-sama, seperti yang telah Anda tunjukkan. Itu yang terbesar dalam kelompok yang diperhitungkan.

Sunting dalam menanggapi pertanyaan Anda

Apa yang perlu Anda lakukan jika Anda menginginkan pendekatan sederhana adalah sebagai berikut:

  • Tentukan arah perpindahan yang benar. Ini paling mudah dilakukan dengan masing-masing mengkulit cembung, dan menentukan normals ke sumbu pemisah.

  • Sekarang Anda perlu menentukan besarnya perpindahan . Mengapa kita tidak bisa menggunakan magnitudo seperti yang diberikan oleh SAT? Karena jika Anda memikirkannya, kedalaman antar penetrasi akan berpotensi lebih besar untuk lambung cembung, daripada pada lambung cekung mereka yang serasi - pikirkan dua E dengan gigi mereka satu sama lain! Seperti yang telah Anda lakukan di atas, temukan semua titik kontak untuk langkah tertentu, tetapi temukan mereka sejajar dengan normals sumbu, karena ini adalah arah perpindahan yang benar. Sekarang tentukan salah satu dari vektor tumpang tindih paralel mana yang paling panjang. Gantilah dengan yang itu, buang sisanya dan lanjutkan ke langkah fisika berikutnya.


Kurasa aku mengerti maksudmu. Jadi dalam skenario "kurang realisme" saya tidak hanya akan mengevaluasi vektor (terpendek) yang diberikan oleh SAT untuk masing-masing poligon, tetapi saya juga harus mempertimbangkan yang lain (lebih besar) tumpang tindih, dan dalam kasus terburuk menggunakan cembung cembung?
bummzack

Lihat hasil edit (terbaru).
Insinyur
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.