Tìm k hàng xóm gần nhất trên một quả cầu


7

Cho một tập hợp gồm điểm trên một mặt cầu và một điểm P khác trên mặt cầu, tôi muốn tìm các điểm k trong S gần nhất (khoảng cách Euclide hoặc vòng tròn lớn).SNPkS

Tôi sẵn sàng làm một lượng tiền tính toán hợp lý. Giải pháp phải chính xác và hiệu quả (nhanh hơn thời gian tuyến tính).


1
Có vẻ như câu hỏi này dễ giải quyết hơn trên mặt phẳng . Bạn đã nghĩ về điều đó, và làm các câu trả lời dễ dàng dịch sang hình cầu, và tại sao (không)? Ví dụ: bạn có thể tính , là một đa giác lồi được xác định bởi các đường trực giao với các đường giữa và , và sử dụng nó cùng với phân vùng không gian để tìm hàng xóm gần nhất, và làm việc từ đó. R2A(v)={p|wSd(p,v)d(p,w)}vw
Liêuwe Vinkhuijzen

@LieuweVinkhuijzen các vấn đề cấu trúc liên kết hình cầu, vì trường hợp sử dụng là một vấn đề về GIS. Tôi có những gì tôi nghĩ sẽ cung cấp một giải pháp làm việc nhưng tò mò về nghệ thuật trước đây. Cảm ơn!
JohnJ

1
JohnJ, Liêuwe đã không nói rằng cấu trúc liên kết hình cầu là không quan trọng; thay vào đó, tôi nghĩ rằng anh ta đang nói rằng có nhiều kỹ thuật tiêu chuẩn để giải quyết vấn đề này trên R2 , và tôi nghi ngờ anh ta khuyên bạn nên bắt đầu bằng cách nghiên cứu các phương pháp tiêu chuẩn đó, và sau đó xem xét liệu chúng có thể được sửa đổi một chút để hãy xem xét rằng bạn thực sự đang ở trên một quả cầu chứ không phải trên R2 .
DW

Câu trả lời:


4

Sử dụng phương pháp phân vùng không gian để tìm kiếm hàng xóm gần nhất .

Ví dụ, một cách tiếp cận là sử dụng cây -d trên bề mặt của hình cầu. Bạn có thể biểu thị mọi điểm trên mặt cầu bằng tọa độ hình cầu : mọi điểm trên mặt cầu đều có tọa độ . Do đó, chúng ta có một không gian 2 chiều với tọa độ . Bây giờ hãy sắp xếp các điểm của bạn bằng cây -d, ở đây chúng tôi có chiều. Có các thuật toán tiêu chuẩn cho tìm kiếm hàng xóm gần nhất trong cây -d; theo kinh nghiệm, thời gian chạy dự kiến ​​là .k(1,θ,ϕ)(θ,ϕ)kk=2kO(lgN)

Bạn sẽ phải thực hiện các sửa đổi nhỏ cho cấu trúc dữ liệu để phản ánh rằng tọa độ "bao quanh" modulo , nhưng điều này không khó. Các chương trình con chính được sử dụng trong việc tìm kiếm người hàng xóm gần nhất trong một cây -d là: cho một điểm và "hình chữ nhật" khu vực , tìm khoảng cách từ đến điểm gần nhất trong . Trong trường hợp của bạn, vùng là , tức là tập hợp các điểm . Thật dễ dàng để tính khoảng cách từ đến điểm gần nhất trong2πkPRPRR[θ,θu]×[ϕ,ϕu]{(1,θ,ϕ):θθθu,ϕϕϕu}PR . Điều này sau đó sẽ cho phép bạn sử dụng thuật toán tiêu chuẩn cho tìm kiếm hàng xóm gần nhất trong cây -d.k

Ngoài ra, thay vì cây -d, bạn có thể sử dụng bất kỳ cây phân vùng không gian nhị phân nào khác hoặc bạn có thể xem các cây số liệu , mặc dù tôi không có bất kỳ lý do nào để hy vọng chúng sẽ tốt hơn đáng kể.k


1

Dưới đây là các liên kết đến hai gói phần mềm khác nhau giải quyết câu hỏi của bạn. Có thể đáng để nghiên cứu từng phương để xem các phương pháp họ sử dụng có thỏa mãn nhu cầu của bạn không:

(1) Lưới Matlab . "Lưới trắc địa là một lưới chẵn trên bề mặt của một hình cầu. Thuật toán được tối ưu hóa cho lưới được tạo bởi GridSphere và sẽ không hoạt động trên lưới trắc địa tùy ý."

(2) DarkSkyApp hình cầu-knn .js . "cung cấp các tra cứu hàng xóm gần nhất nhanh nhất trên một quả cầu .... được kiểm tra tốt và hoạt động chính xác bất kể mọi thứ trên trái đất nằm ở đâu."

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.