Làm thế nào để phân chia một đa giác lõm vào đa giác lồi trong Arcpy?


20

Tôi đang tìm kiếm một công cụ hoặc thuật toán để phát hiện các đa giác lõm và chia chúng thành các đa giác lồi. Giống như được giải thích trong hình, đa giác màu xanh được chia thành đa giác A và B

Tôi đang sử dụng Arcpy theo Arcgis 10.1

đa giác chia


15
Có lẽ bạn có thể giải thích lý do tại sao bạn làm điều này? Xét cho cùng, (a) phát hiện rất dễ dàng: một đa giác lõm sẽ có ít diện tích hơn thân tàu lồi; và (b) bất kỳ tam giác nào của đa giác sẽ tự động phân tách nó thành đa giác lồi, bởi vì tất cả các tam giác đều lồi. Điều này cho thấy bạn có một số linh hoạt trong việc lựa chọn trong số nhiều giải pháp có thể.
whuber

2
Bộ công cụ này sẽ cho phép bạn xem Bill đang nói gì về tài

1
Có một câu trả lời cho vấn đề này trên Stack Overflow: stackoverflow.com/a/6686842/1300519 Các thuật toán được mô tả không quá khó để viết bằng arcpy.
Snorfalorpagus

1
@snorf Điều đó dường như để trả lời một câu hỏi hơi, nhưng quan trọng, khác nhau. Giải pháp rõ ràng liên quan đến sự kết hợp giữa "đa giác" và "lỗ hổng" , đó không phải là những gì thường có nghĩa là "chia tách". Ít nhất, câu trả lời đó cần được xây dựng thêm để có ích ở đây. (BTW, câu trả lời của bạn đã được thay đổi thành một nhận xét vì tham chiếu chéo tới các giải pháp khác ở nơi khác trên Web, mà không có bất kỳ lời giải thích bổ sung nào, không được xem là câu trả lời ở đây trên SE.)
whuber

2
Đánh giá từ các ý kiến ​​ở đây và không có câu trả lời nào phát sinh, đề nghị của tôi sẽ là chỉnh sửa câu hỏi của bạn để kết hợp phản hồi đó và xem xét đưa ra một khoản tiền thưởng.
PolyGeo

Câu trả lời:


1

Dưới đây là một vài bước để xác định các đỉnh từ các phần lõm:

với bưu kiện: hình học giới hạn tối thiểu (thân tàu) -> bưu kiện

với bưu kiện: FeatureVerticesToPoint -> bưu kiện

với bưu kiệnHull: FeatureVerticesToPoint -> bưu kiệnHullPoints

với bưu kiện và bưu kiệnHullPoint: đối xứng Diff -> concavePoints

dựa trên những điểm đó, bạn có thể vẽ bissectrice để cắt đa giác của mình (khoảng cách mang theo đường thẳng), chọn các cạnh của tam giác Voronoï cắt nhau nhưng không chia sẻ một đoạn với ranh giới bưu kiện của bạn (chọn theo vị trí sau khi chia tam giác các đường ở các đỉnh), chọn đỉnh trên trang đối diện và tạo một đường (trỏ tới đường), chọn điểm gần nhất ở cạnh đối diện và tạo một đường (trỏ tới đường) ...

Cuối cùng, sử dụng các dòng ưa thích của bạn và các bưu kiện gốc với "tính năng cho đa giác" để phân chia các đa giác.

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.