Menemukan titik tabrakan


8

Saya sedang menulis simulator tubuh kaku 2D. Objek yang disimulasikan adalah poligon cembung. Pertanyaan saya melibatkan bagaimana cara memutuskan "titik" tabrakan, sehingga ketika saya menerapkan gaya respons, saya juga dapat menghitung torsi.

Dalam 2D, metode pendeteksian tabrakan narrowphase yang populer tampaknya adalah Teorema Sumbu Pemisah. Namun, sementara ini memberi Anda "mereka bertabrakan?" dan juga "oleh berapa banyak?", itu TIDAK memberi Anda titik referensi (yang saya tahu) di mana untuk menerapkan kekuatan respons (dan dengan demikian menghitung torsi) *.

Metode lain (yang juga membuat saya lebih tertarik, karena itu yang digunakan dalam 3D, yang akan menjadi langkah logis berikutnya) adalah menghitung perbedaan Minkowski dari dua poligon, dan memutuskan bahwa mereka bertabrakan jika (0,0) adalah terkandung dalam poligon yang dihasilkan. Tetapi, bagaimana Anda menggunakan ini untuk menentukan titik relatif di mana menerapkan kekuatan respons? Hipotesis saya adalah bahwa, karena setiap wajah dari perbedaan ini secara efektif sesuai dengan wajah dari salah satu poligon, jarak pemisahan adalah jarak terpendek dari (0,0) ke MD, dan Anda menerapkannya pada wajah yang sesuai pada poligon. .

Sebagai bonus, bagaimana cara melakukan ini dalam 3D?

* Saat saya menulis ini, saya baru menyadari bahwa, ketika menggunakan SAT, saya bisa melacak titik mana yang tumpang tindih, dan menerapkan gaya pada "rata-rata" titik-titik tersebut. Tapi saya harus memutuskan yang mana dari beberapa sumbu non-terpisah untuk melakukan trik kecil ini ...

Jawaban:


6

Kata kunci yang Anda cari adalah "titik dukungan" dan "bermacam-macam" .

Erin Catto telah menulis mesin fisika 2D yang sangat baik. Dia secara teratur hadir di GDC. Anda harus dapat menemukan beberapa slide di mana dia menjelaskan manifold tabrakan. Versi pertama dari mesin fisika-nya hanya mendukung bentuk kotak untuk hanya menghitung poin dukungan. Di situlah mesin mendapat namanya Box2D .

Jawabannya terlalu rumit untuk dijelaskan sepenuhnya di sini, tetapi ikhtisarnya adalah Anda harus memilih total 2 poin dari dua bentuk. Kemudian terapkan kekuatan restitusi secara merata untuk masing-masing. Anda juga harus berurusan dengan kasing sudut di mana lebih baik menggunakan satu titik dukungan saja.

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.