Thuật toán nhanh nhất để kiểm tra xem hai hình khối có giao nhau không (trong đó các hình khối không thẳng hàng với nhau)?


7

Tôi đang tìm kiếm một thuật toán để kiểm tra xem hai hình khối có giao nhau không. Người ta có thể kiểm tra xem mỗi trong số 6 mặt của khối A có được giao nhau bởi mỗi 12 cạnh của khối B hay không, nhưng đó là 72 lần kiểm tra. Tôi đã nghe nói có một bài báo từ năm 1997 hoặc lâu hơn, mô tả một phương pháp chỉ sử dụng 15 kiểm tra giao lộ, nhưng tôi không thể tìm thấy nó. Bạn có thể vui lòng chia sẻ tên của bài báo, mô tả nó hoặc mô tả nó trong lời nói của bạn.

Câu hỏi này liên quan đến các hình khối thẳng hàng trục không thực sự hữu ích. /programming/5009526/overlaps-cubes


các cạnh. Tôi đã sửa nó.
Stepan

Câu trả lời:


5

Kiểm tra trục tách. (Còn được gọi là định lý trục tách, kiểm tra định lý trục tách, yada yada.)

Nếu bạn có thể tìm thấy một trục (bất kỳ trục nào), không chỉ các vectơ cơ sở XYZ thông thường) trong đó các hình chiếu của hai hình khối của bạn không trùng nhau, thì chúng không giao nhau.

Có rất nhiều hướng dẫn và triển khai có sẵn thông qua Google, nhưng bài này có các biểu đồ đẹp:

https://gamedevelopment.tutsplus.com/tutorials/collision-detection-USE-the-separating-axis-theorem--gamedev-169

Đây là những gì chúng tôi dạy sinh viên dev grad trò chơi của chúng tôi và tất cả họ đều có việc làm. :)

Ngoài ra, kiểm tra các giao điểm của các đỉnh và các mặt hoặc các cạnh không bao gồm trường hợp các hình khối được lồng vào nhau, vì vậy đó không phải là một giải pháp thực sự. SAT có vẻ phức tạp trong 3D, nhưng nó chỉ là sự lặp lại. Cắt, dán, theo dõi và thử một số trường hợp cạnh và bạn sẽ nhận được nó.

Một phương pháp đơn giản, đủ tốt để phát hiện va chạm ở pha rộng là coi các khối như hình cầu. (Nếu chúng thực sự là các hình khối thông thường, thì sai số là rất nhỏ, mặc dù tỷ lệ thuận với tỷ lệ của các hình khối so với nhau.)

Lấy khoảng cách giữa tâm của các hình khối và xem nó có lớn hơn tổng của một nửa đường chéo của hai hình khối không. (Về cơ bản, bạn đang kiểm tra các quả cầu giới hạn thay vì lo lắng về siêu phẳng.)


Bạn cũng có thể xem xét GJK
Ẩn danh ẩn danh

1
@AnonymousAnonymous Tôi tránh TLA bất cứ khi nào có thể.
3Dave

1
Ok ... Thuật toán khoảng cách Gilbert-Johnson-Keerthi ... :-)
Ẩn danh ẩn danh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.