Tes persimpangan 2D kotak objek yang diluruskan

9

Saya memiliki dua kotak pembatas objek-selaras (yaitu tidak sejajar sumbu, mereka berputar dengan objek) Saya ingin tahu apakah dua kotak objek-tumpang tindih. ( Sunting: catatan - Saya menggunakan kotak uji bounded aligned untuk dengan cepat membuang objek yang jauh, jadi tidak masalah jika rutin quad sedikit lebih lambat. )

Kotak saya disimpan sebagai empat x, poin y. Saya telah mencari-cari jawaban, tetapi saya tidak dapat memahami nama variabel dan algoritma dalam contoh untuk menerapkannya pada kasus khusus saya.

Dapatkah seseorang membantu menunjukkan kepada saya bagaimana ini akan dilakukan, dengan cara yang jelas dan sederhana? Terima kasih. (Bahasa tertentu tidak penting, kode pseudo gaya-C adalah OK.)

AshleysBrain
sumber

Jawaban:

5

Jika Anda tahu di mana mencarinya itu mudah. Anda mencari oobb. Buka di sini: http://www.realtimerendering.com/intersections.html .
Di sana Anda menemukan tautan ke situs ini http://www.geometrictools.com/LibMathematics/Intersection/Intersection.html
dan di sana menemukan kode yang benar. (ctrl + f "Persimpangan kotak (2D)")

Ini menggunakan SAT dan berisi kode sumber dan artikel.

Notabene
sumber
Algoritma yang dijelaskan oleh geometrictools adalah yang akan saya tunjukkan.
Jari Komppa
Saya mengerti bahwa ini 4 tahun yang lalu, tetapi selalu menjelaskan downvote dan semua itu. Ini cukup "Jawaban Anda ada di kastil lain", dan sekarang jawabannya bahkan tidak ada dalam kasus kedua.
Yann
2

Cara yang lebih mudah mungkin adalah dengan menguji setiap simpul kotak B terhadap setiap sisi kotak A (menghitung jarak yang ditandatangani). Dengan cara ini Anda dapat mengklasifikasikan setiap simpul sebagai "di depan" atau "di belakang" segmen.

Jika semua verteks B diklasifikasikan sebagai "di depan" salah satu segmen A, B dan A tidak tumpang tindih; jika tidak, mereka melakukannya.

Ini agak terlibat, jadi Anda mungkin mendapatkan beberapa peningkatan kinerja dengan melakukan pemeriksaan lingkaran-lingkaran terlebih dahulu, menggunakan lingkaran pembatas dari kotak (sepele untuk menghitung)

ggambett
sumber
Saya pertama kali melakukan uji kotak bounded aligned untuk dengan cepat membuang objek yang jauh ... apakah Anda memiliki rincian lebih lanjut tentang uji quad-quad?
AshleysBrain
sementara memutar kedua paha depan dengan transformasi yang sama sehingga salah satu dari mereka berakhir sumbu sejajar ... kemudian gunakan tes SAT seperti notabebe disebutkan. ketika hasilnya ditemukan, balikkan rotasi untuk mendapatkannya kembali.
Steve H