Sắp xếp một tập hợp các điểm không có tổ chức dọc theo một đường cong


9

Tôi có một tập hợp các điểm 3D (mà tôi phục hồi từ một thư viện thực hiện phần thứ ba của một vật thể rắn) thuộc về một đường cong (nghĩa là một cạnh của vật rắn). Điều đó có nghĩa là đường cong chắc chắn đi qua từng điểm này.

Tuy nhiên, tập hợp điểm không có thứ tự nên tôi cần sắp xếp chúng để có thể vẽ đường cong này một cách chính xác.

Có bất kỳ phương pháp được biết đến cho các loại vấn đề?

Một số thông tin bổ sung:

  • Các đường cong là tham số nói chung (splines / bezier, các lát tròn ..).
  • Các điểm được cho là tọa độ điểm nổi.
  • Các điểm được đóng gói rất dày đặc (nhưng chúng có thể dày đặc như tôi muốn). Để cho bạn một ý tưởng, đối với một đường cong chiếm 19 đơn vị tính theo x, 10 đơn vị tính theo x và 5 đơn vị tính theo z, tôi trích dẫn một chuỗi các điểm trong một đoạn đường cong: (20.7622, ​​25.8676, 0) (20,6573, 25,856, 0) (20.5529, 25.8444, 0) (20.489, 25.8329, 0) (20.3454, 25.8213, 0)

Ngay cả khi chúng ta biết thứ tự có đến vô số đường cong phù hợp với máng. Ngay cả khi chúng ta thêm các ràng buộc bổ sung, thì các kết thúc mở có vấn đề vì hướng tiếp tuyến của chúng có thể tùy ý. Một hình ảnh ở đây
joojaa 23/2/2016

@joojaa Vâng, bạn nói đúng. Nhưng vì việc đóng gói các điểm rất dày đặc, tôi không hy vọng nó chính xác. Nếu tôi có được thứ tự đúng, tôi đã dự định kết nối chuỗi các điểm dưới dạng đa tuyến.
andrea.al

Trong mã cần đặt hàng các điểm, bạn thậm chí có biết về dạng tham số của đường cong không? (Nếu không, tôi sẽ xóa câu trả lời đầu tiên của mình, vì nó yêu cầu bạn phải biết dạng tham số.)
Martin Ender

@ MartinBüttner Vâng, tôi có quyền truy cập vào dạng tham số của đường cong, nếu cần.
andrea.al

1
Hãy hiển thị một tập hợp điểm điển hình!
Yves Daoust

Câu trả lời:


6

Bạn có một ví dụ của một vấn đề gọi là tái tạo đường cong từ các điểm không có tổ chức . Bây giờ bạn đã biết những gì cần tìm kiếm, bạn sẽ tìm thấy một số phương pháp, chẳng hạn như lớp vỏ, lớp vỏ NN, v.v ... Dưới đây là một vài liên kết:

Vì bạn đang xử lý các đường cong và các mẫu rất dày đặc, tôi khuyên bạn nên tính toán một cây bao trùm tối thiểu Euclide.


4

Sau một số làm rõ, có lẽ có một cách tiếp cận tốt hơn mà thậm chí không cần biết dạng tham số của đường cong và cũng tránh được bước giảm thiểu số có khả năng có vấn đề.

Nếu đường cong không tự giao nhau và các điểm được đóng gói dày đặc trên đường cong (và ý tôi là chúng phải gần hơn bất kỳ hai điểm nào trên đường cong không thuộc cùng một đoạn, ví dụ như bởi đường cong xung quanh chính nó), sau đó bạn có thể dễ dàng xác định điểm trước và điểm tiếp theo cho từng mẫu:

  • Xác định hai hàng xóm gần nhất với mỗi điểm. Đó là một hoạt độngO(nlogn) .
  • Bạn sẽ phải làm một số điều trị đặc biệt cho các điểm cuối. Hai hàng xóm gần nhất của họ sẽ là hai điểm tiếp theo dọc theo đường cong thay vì một điểm ở mỗi bên. Bạn có thể phát hiện các heuristur này nếu tỷ lệ khoảng cách giữa hai hàng xóm khác nhau nhiều hơn một số ngưỡng (1,5 nói, tùy thuộc vào độ trơn của đường cong của bạn và mức độ dày đặc của các điểm). Hoặc bạn có thể coi dữ liệu hàng xóm gần nhất của mình dưới dạng biểu đồ, trong đó bạn sẽ thấy rằng hai hàng xóm của các điểm cuối chỉ vào nhau (điều này không nên xảy ra ở bất kỳ nơi nào khác trong biểu đồ).
  • Bây giờ bạn có thể chỉ cần chọn một điểm cuối và đi dọc theo hàng xóm gần nhất (luôn chọn điểm bạn không đến) để đi qua các điểm dọc theo đường cong.

Đặc biệt nếu bạn có thể làm cho các điểm rất dày đặc thì đây sẽ là lựa chọn đáng tin cậy nhất trừ khi đường cong tự giao nhau. Ngay cả trong trường hợp đó, cách tiếp cận này có thể cứu vãn được với điều kiện tự giao nhau ở một góc đủ lớn, đường cong đủ mịn (trong trường hợp đó bạn có thể chọn hàng xóm chính xác dựa trên một số ràng buộc mà các bước kế tiếp có thể tạo ra một góc lớn hơn một số ngưỡng ).θ


3

Vì bạn chỉ có các biểu diễn dấu phẩy động của các điểm, nên không có gì đảm bảo rằng những điểm này vẫn nằm chính xác trên đường cong, do lỗi làm tròn. Vì vậy, tôi nghĩ rằng cách tiếp cận chung duy nhất là gần đúng vị trí của đường cong, bằng cách tìm điểm gần nhất trên đường cong với mẫu của bạn . Ví dụ: nếu đường cong tham số của bạn là thì bạn có thể cố gắng giảm thiểu(X,Y,Z)(x(t),y(t),z(t))

(Xx(t))2+(Yy(t))2+(Zz(t))2

đối với . Nếu bạn biết loại đường cong nào bạn đang xử lý, có thể có các giải pháp phân tích tốt cho vấn đề này, nếu không, bạn sẽ phải sử dụng một số thuật toán số. Vì các điểm của bạn phải rất gần với đường cong, nên phương pháp này đáng tin cậy (với điều kiện là thuật toán tối thiểu hóa), trừ khi bạn có một mẫu chính xác nơi đường cong (gần như) tự đi qua. Tuy nhiên, trong trường hợp đó có lẽ bạn đã hết may mắn.t

Khi bạn đã có cho mỗi điểm của mình, bạn chỉ cần sắp xếp chúng theo . Tất nhiên, nếu bạn có bất kỳ quyền kiểm soát nào về cách bạn nhận được điểm, bạn có thể vượt qua tất cả các rắc rối này bằng cách quay lại cùng với tọa độ của điểm ngay khi tạo chúng.ttt

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.