Cách nhanh nhất để tìm tam giác lưới gần nhất từ ​​điểm được chỉ định


7

Tôi có hai lưới tam giác (hãy để tôi gọi chúng là A và B). Các mắt lưới có thể rất lớn (10.000 - 100.000 đa giác). Tôi muốn tìm mọi điểm trong A tam giác gần nhất từ ​​lưới B.

Có một cách nhanh chóng để làm điều đó? Có một giải pháp gần thời gian thực tồn tại?

Tôi tìm thấy một số bài viết mô tả các cách để tìm khoảng cách từ một điểm đến một tam giác và tôi biết một chút về kd-tree / bvh-tree. Do đó tôi có thể tìm thấy một số hình tam giác đủ gần với điểm đã chỉ định và sau đó tôi có thể tìm thấy hình tam giác bằng lực vũ phu.

Nhưng tôi đoán rằng phương pháp này sẽ không đủ nhanh.

Câu trả lời:


7

Tạo một octree và trong mỗi ô lá đặt danh sách tất cả các tam giác từ B giao nhau với ô, đánh dấu ở mỗi cấp cho dù ô đó có trống hay không. Nếu một ô ở bất kỳ cấp nào chỉ có 1 poly thì poly để bạn có thể dừng tìm kiếm sớm (hình tam giác sàn / tường lớn). Bạn có thể giữ các ô phân chia phụ cho đến khi bạn có số lượng hình tam giác hợp lý trong mỗi ô.

Sử dụng octree tìm ô không trống gần nhất.

Tìm tam giác gần nhất trong ô này, lưu ý khoảng cách.

Đối với mỗi ô không trống nằm trong khoảng cách này: Tìm tam giác gần nhất trong các ô này, giữ khoảng cách gần nhất, bỏ qua các ô xa hơn mỗi lần này.

Lý do cho lần lặp cuối cùng này là vì một hình tam giác ở phía xa của một ô có thể xa hơn một hình tam giác trong một ô lân cận.

Nếu bạn cần thêm tốc độ, bạn có thể sử dụng điều này với GPGPU (ví dụ: OpenCL) để xây dựng quãng tám và lặp lại trên mọi điểm của A song song khi quãng tám của bạn được tạo.

Lưu ý rằng hiệu suất GPGPU khác nhau rất nhiều giữa các GPU. Vì vậy, thời gian thực trên một người có thể nhanh hơn (hoặc thậm chí chậm hơn) so với CPU.

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.