2010-06-16 27 views
11

Tôi có một tập hợp các điểm mô tả bề mặt của một hình dạng nên có hình cầu gần và tôi cần một phương pháp để xác định xem có điểm nào khác nằm trong hình dạng này không. Trước đây tôi đã xấp xỉ hình dạng như một quả cầu chính xác, nhưng điều này đã chứng minh là không chính xác và tôi cần một phương pháp chính xác hơn. Đơn giản và tốc độ là thuận lợi hơn độ chính xác hoàn thành, một xấp xỉ tốt sẽ đủ.Làm thế nào tôi có thể kiểm tra nếu một điểm nằm trong một hình dạng 3d với bề mặt của nó được xác định bởi một đám mây điểm?

Tôi đã bắt gặp các kỹ thuật chuyển đổi đám mây điểm thành lưới 3D, nhưng hầu hết những thứ tôi đã tìm thấy đều rất phức tạp và tôi đang tìm kiếm một thứ đơn giản nhất có thể.

Bất kỳ ý tưởng nào?

+2

Đám mây có được cố định không? Bề mặt có lồi không? Bạn cần kiểm tra điểm bao lâu một lần? –

+0

Đám mây không cố định 'dài hạn', nhưng với mục đích của các tính toán này, vì chúng sẽ được thực hiện trên 'ảnh chụp nhanh' của hệ thống. Nó không cần phải chạy trong thời gian thực như một trò chơi hay bất cứ thứ gì. Các thử nghiệm sẽ được thực hiện khoảng 2 giây một lần. – Ben

Trả lời

10

Điều gì sẽ xảy ra nếu bạn tính toán trọng tâm của đám mây và chuyển đổi tọa độ của nó thành một hệ cực có nguồn gốc là trọng tâm.

Sau đó, chuyển đổi điểm bạn muốn kiểm tra sang cùng một hệ tọa độ.

Giả sử bề mặt có thể biểu diễn bằng hình tam giác Delaunay, xác định ba điểm có chênh lệch nhỏ nhất về góc từ điểm bạn đang kiểm tra.

Dự án điểm bạn đang kiểm tra vào tam giác được xác định bởi ba điểm đó và xem khoảng cách của điểm chiếu từ trọng tâm có lớn hơn khoảng cách của điểm thực tế hay không.

Về cơ bản, bạn đang xây dựng một lưới hình tam giác của thân lồi, nhưng khi cần một tam giác tại một thời điểm. Nếu tốc độ thực thi thực sự quan trọng, bạn có thể lưu lại các tam giác kết quả khi bạn đi.

Steven Sudit cũng đã đề xuất a useful optimization mà tôi khuyên bạn nên nếu bạn đi xuống con đường này.

+0

Điều này nghe có vẻ giống như một ý tưởng tốt, cảm ơn nhiều! Tôi sẽ thử ngay bây giờ và xem nó có hoạt động không. Tôi đã có danh sách các điểm lân cận cho mỗi điểm để tối ưu hóa một thuật toán khác, mà tôi có thể tái chế để tăng tốc độ này. – Ben

+0

Tôi nghĩ về nó một chút và tôi nghi ngờ rằng ba nên luôn luôn là đủ. Điều này được dựa trên ý tưởng rằng bề mặt có thể được xác định theo hình tam giác. Vì vậy, miễn là điểm là ở mặt bên của mặt phẳng hình tam giác đó là gần gũi hơn với centroid, sau đó nó là trong giới hạn. Tất nhiên, nếu giả định này là sai - nếu có thể có hollows và overhangs - sau đó không ai trong số này nắm giữ. Sau đó, một lần nữa, tôi không biết những gì; việc thêm nhiều điểm hơn sẽ không tự hoàn thành. –

+0

Hoặc, trong thuật ngữ chính xác, tôi giả định rằng nó là một vỏ lồi có thể xác định về hình tam giác Delaunay. –

7

Tôi nghĩ phương pháp của Bill Carey đang đi đúng hướng, nhưng tôi muốn đề xuất tối ưu hóa có thể.

Vì hình dạng gần hình cầu, bạn có thể tính trước bán kính của quả cầu bị ràng buộc bởi bán kính và hình cầu bao quanh nó. Bằng cách này, nếu khoảng cách của điểm nằm trong quả cầu nhỏ hơn, đó là một đòn xác định và nếu nó ở bên ngoài quả cầu bên ngoài, đó là một lỗi nhất định.

Điều này nên để bạn giải quyết các trường hợp dễ dàng rất nhanh chóng. Đối với những người khó hơn, phương pháp của Carey đã kết thúc.

+0

Đó chắc chắn là một tối ưu hóa tốt. Tôi có thể thêm tham chiếu được phân bổ cho câu trả lời này vào câu trả lời của tôi không? –

+0

@Bill, tôi nghĩ bạn vừa làm. :) –

+0

@Bill: Xem liên kết "liên kết" ở dưới cùng bên trái của mỗi câu trả lời? Bạn có thể sử dụng dấu cộng hoặc đánh dấu hoặc html để thực hiện "Xem tối ưu hóa tốt đẹp của Steven". loại liên kết trong bài đăng của bạn ... Đó là cách tôi thường quản lý những thứ này. – dmckee

0

Sử dụng cây kd.

http://en.wikipedia.org/wiki/Kd-tree

Bài viết cung cấp giải thích tốt.

Tôi có thể xóa thêm bất kỳ hiểu lầm nào.

+0

Một cây kd có liên quan đến phần tìm ba điểm gần nhất, mặc dù có vẻ như Ben có các phương pháp khác để hoàn thành điều này. –

+0

Bạn có thể xây dựng một cây kd trong một hệ tọa độ cực không? Tôi đã không làm việc với họ đủ để biết. Nếu vậy, nó có thể hữu ích. –

+0

@Bill: Theo như tôi biết, kd-tree là dành cho các tọa độ Descartes. Nếu có, bạn luôn có thể chuyển đổi. Nếu không, sau đó tôi muốn được tò mò để xem cách họ xử lý các vấn đề của các đơn vị hỗn hợp (góc độ so với khoảng cách). –

Các vấn đề liên quan