Giả sử tôi có một lưới 2D bao gồm các tam giác không chồng chéo và một tập hợp các điểm . Cách tốt nhất để xác định tam giác mà mỗi điểm nằm trong là gì? { p i } M i = 1 ⊂ ∪ N k = 1 T K
Ví dụ: trong hình ảnh sau đây, chúng tôi có , , , vì vậy tôi muốn một hàm trả về danh sách .p 2 ∈ T 4 p 3 ∈ T 2 f f ( p 1 , p 2 , p 3 ) = [ 2 , 4 , 2 ]
Matlab có chức năng pointlocation mà làm những gì tôi muốn cho mắt lưới Delaunay, nhưng nó không cho mắt lưới chung.
Suy nghĩ đầu tiên (ngu ngốc) của tôi là, đối với tất cả các nút , hãy lặp qua tất cả các tam giác để tìm ra tam giác nằm trong. Tuy nhiên, điều này cực kỳ không hiệu quả - bạn có thể phải lặp qua mọi tam giác cho mọi điểm, vì vậy nó có thể làm việc .p i O ( N ⋅ M )
Suy nghĩ tiếp theo của tôi là, đối với tất cả các điểm , hãy tìm nút lưới gần nhất thông qua tìm kiếm lân cận gần nhất, sau đó xem qua các hình tam giác được gắn vào nút gần nhất đó. Trong trường hợp này, công việc sẽ là , trong đó là số lượng tam giác tối đa được gắn vào bất kỳ nút nào trong lưới. Có một vài vấn đề có thể giải quyết được nhưng gây phiền nhiễu với phương pháp này, O ( a ⋅ M ⋅ l o g ( N ) ) a
- Nó đòi hỏi phải thực hiện một tìm kiếm hàng xóm gần nhất hiệu quả (hoặc tìm một thư viện có nó), đó có thể là một nhiệm vụ không cần thiết.
- Nó yêu cầu lưu trữ một danh sách các tam giác được gắn vào mỗi nút, mà mã của tôi hiện không được thiết lập - ngay bây giờ chỉ có một danh sách tọa độ nút và danh sách các phần tử.
Nhìn chung, nó có vẻ không phù hợp, và tôi nghĩ nên có một cách tốt hơn. Đây phải là một vấn đề phát sinh rất nhiều, vì vậy tôi đã tự hỏi liệu có ai có thể đề xuất cách tốt nhất để tiếp cận việc tìm ra các tam giác của các nút trong lý thuyết hoặc về mặt thư viện có sẵn hay không.
Cảm ơn!