Saya mencoba menerapkan teorema sumbu pemisah di C #. Saya memiliki fungsi yang dapat menghitung vektor terjemahan minimum antara dua poligon. Namun, sepertinya saya tidak dapat membuat fungsi yang menghitung vektor terjemahan minimum antara satu poligon dan beberapa poligon lainnya. Jujur, saya sudah mengerjakan ini selama berbulan-bulan dan saya tidak mendekati solusi dan belum dapat menemukan solusi online. Selalu ada beberapa kasus tepi yang tidak mengembalikan hasil yang benar, yang mengarah ke bug prioritas tinggi di permainan saya.
Berikut adalah kasus tepi umum yang tidak berfungsi dengan benar:
Apakah ada solusi terkenal untuk masalah ini? Yang bisa saya temukan adalah orang-orang mengatakan "cukup lakukan SAT pada setiap poligon" tetapi ini jarang menghasilkan vektor terjemahan minimum .
Bantuan apa pun akan sangat dihargai.
sumber
Jawaban:
Idealnya, Anda tidak membangun lingkungan Anda dari poligon. Anda membuatnya dari tepi (yang mungkin Anda hitung dari serangkaian poligon). Dalam contoh pertama Anda, misalnya, ada tepi diagonal tunggal; pada contoh terakhir, kotak diletakkan pada satu sisi horisontal tunggal.
Fakta bahwa editor atau alat Anda menggunakan bentuk individual yang lebih kecil untuk membangun level seharusnya tidak memengaruhi runtime.
Pendekatan yang sedikit lebih sederhana hanya akan menghilangkan tepi "bagian dalam" dari bentuk dasar. Untuk contoh terakhir Anda, ada dua sisi antara kotak "lantai"; abaikan ini selama deteksi tabrakan.
Anda dapat menemukan beberapa gambar yang lebih baik dan beberapa ide implementasi dengan membaca bagian 4.5 (tepi dan rantai tepi) dalam dokumentasi Box2D .
sumber