Tìm đường hầm trung tâm?


19

Tôi có một số tệp bản đồ bao gồm 'polylines' (mỗi dòng chỉ là một danh sách các đỉnh) đại diện cho các đường hầm và tôi muốn thử và tìm đường hầm 'đường trung tâm' (hiển thị, đại khái, màu đỏ bên dưới).

văn bản thay thế

Tôi đã có một số thành công trong quá khứ bằng cách sử dụng tam giác Delaunay nhưng tôi muốn tránh phương pháp đó vì nó không (nói chung) cho phép sửa đổi dễ dàng / thường xuyên dữ liệu bản đồ của tôi.

Bất kỳ ý tưởng về làm thế nào tôi có thể có thể làm điều này?

Tôi đang làm việc trong C ++ khá thô.


gis.stackexchange.com/q/177/162 cũng đề cập đến những gì bạn đang tìm kiếm: thuật toán bộ xương .
Julien

3
Tôi nghĩ rằng liên kết chéo với SO có liên quan vì có câu trả lời quá stackoverflow.com/questions/3983613/find-tunnel-center-line
Tiến sĩ belisarius

@julien: Bạn đã liên kết nó trong câu trả lời của bạn. Tôi đã đọc qua nó, nhưng nó không trả lời câu hỏi cụ thể của tôi (mà, để viết lại, là: 'Tôi đã biết cách tìm MAT - nhưng tôi tự hỏi liệu có ai biết thuật toán không Delaunay không [tức là không phải là lib - vấn đề không phải là mã hóa của tôi;)] có hiệu quả đối với các thay đổi cục bộ '). Có một câu trả lời về SO cũng không hoàn toàn trả lời nhưng mất rất nhiều nỗ lực và khiến tôi suy nghĩ rất nhiều vì vậy tôi đã trao séc cho anh chàng đó cho đến khi có điều gì đó tốt hơn xuất hiện. Không có câu trả lời nào dưới đây là tốt cả (đó có thể là lỗi của tôi).
sje394

Câu trả lời:


6

Bạn đã rút ra một xấp xỉ tốt cho Biến đổi trục trung gian. Tam giác Delaunay thực sự cung cấp một cách tiếp cận tốt cho nó. (Thách thức chính là các phần của MAT là các phần của parabolas, không chỉ các đoạn thẳng.)

Tôi đã chạy qua các tài liệu tham khảo về mã làm việc (thường là trong C / C ++ tôi nhớ lại) trong tài liệu học thuật. Thực hiện tìm kiếm trên Google Scholar và tìm kiếm các bài báo cũ hơn (những bài mới hơn dường như đang tập trung vào các tính toán 3D).


Tôi có một số mã làm việc, sử dụng Delaunay. Tôi thực sự hỏi nếu có những cách khác.
sje394

1
@ sje394 Trước hết, Delaunay chỉ giải quyết được vấn đề, vì vậy với lý do đó, có thể đáng để nghiên cứu mã tốt hơn. Thứ hai, thực sự có những cách khác. Tôi có thể phác thảo hai cách ngắn gọn: (1) tìm kiếm MAT bằng các bộ đệm bên trong và (2) thực hiện phân tích địa hình trên lưới khoảng cách Euclide của các đường dẫn. Tôi cũng không đề cập đến vì cả hai đều kém hiệu quả hơn và cho kết quả kém hơn. Có thể hiểu rằng phương pháp thứ hai có thể tuân theo một giải pháp động nhanh hợp lý.
whuber

4

Nó có thể đáng để xem xét "bộ xương đa giác".

Có một số mẫu nguồn C ++ tại http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/St dán_skim_2 / Ch CHƯƠNG_main.html


Cảm ơn underdark. Tôi sẽ xem xét thêm về CGAL. Nhưng yêu cầu tính toán lại không tốn kém khi dữ liệu bản đồ của tôi thay đổi là khó khăn.
sje394

CGAL là khá nhanh - một tính toán trên bay nên có thể. Mặt khác, bạn có thể xem cái gọi là 'cấu trúc dữ liệu động học': cgal.org/Manual/3.3/doc_html/cgal_manual/ phỏng
julien

"Bộ xương" là một thuật ngữ khác của MAT. Tìm kiếm "biến đổi trục trung gian" đã mang lại nhiều lượt truy cập tốt hơn so với tìm kiếm trên "bộ xương" theo kinh nghiệm của tôi.
whuber

"bộ xương" có vẻ chung chung hơn - MAT chỉ là một thuật toán cụ thể cho bộ xương, phải không? Sao cũng được, đó không phải là chủ đề ...!
Julien

Giấy phép cho CGAL có vẻ hạn chế (iev đắt tiền - đây là phần mềm thương mại).
sje394
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.