Làm thế nào để tính toán bộ xương thẳng bằng Python?


12

Có gói Python nào cung cấp triển khai thuật toán Straight Skeleton không?

Tôi biết rằng dự án CGAL mã nguồn mở (C ++) có triển khai nhưng có vẻ như các ràng buộc cgal không bao gồm gói CGAL này .

Trong mọi trường hợp, tôi muốn triển khai Python thuần túy mà tôi có thể sửa đổi / mở rộng cho phù hợp với nhu cầu của mình.

Mặc dù việc triển khai có thể xử lý các đa giác có lỗ sẽ tốt hơn, nhưng nó không thực sự cần thiết.


1
Bạn đã thử nghiệm pySkeleton hoặc Skeletron ?
Farid Cheraghi 4/03/2015

Tôi đã thử pySkeleton. Ứng dụng GUI không hoạt động với tôi và tôi vẫn chưa tìm thấy thời gian để kiểm tra xem mã có thể cứu được hay không
underdark

nhập các đỉnh đa giác = [(0,0), (0,5), (5,5), (5,0)] cạnh = [(0,1), (1,2), (2,3), (3.0)] p = polygon.Polygon (đỉnh, cạnh) skeleton_graph = p.st ức_sk MP (). NGUỒN \ test.py ", dòng 6, trong <module> p = polygon.Polygon (đỉnh, cạnh) Tệp" C: \ pySkeleton \ pySkeleton \ polygon.py ", dòng 44, trong init self.vertices = map (Point, đỉnh) LoạiError: __init __ () mất chính xác 3 đối số (2 đã cho)
ramesh

Câu trả lời:


6

Có lẽ bạn có thể sửa đổi pySkeleton của Olivier Teboul cho phù hợp với nhu cầu của bạn.

Tôi đã không có cơ hội để xem mã thực tế nhưng từ những gì anh ta nói nó phải là Python thuần túy .


3

Bạn có thể sử dụng pySkeleton như sau:

from pySkeleton import polygon

vertices = [(0,0), (0,5), (5,5), (5,0)]
edges = [(0,1), (1,2), (2,3), (3,0)]

p = polygon.Polygon(vertices, edges)
skeleton_graph = p.straight_skeleton()

Bạn nhận được một đối tượng đồ thị với các nút và Arcs, bạn có thể truy cập đơn giản bằng cách:

nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs

Như đã nói trong pySkeleton readme.txt, các đỉnh đa giác cần phải theo thứ tự theo chiều kim đồng hồ. Đối với các lỗ trong đa giác, các đỉnh cần phải theo thứ tự ngược chiều kim đồng hồ.

vertices = [(25.0, 15.0), (45.0, 15.0), (45.0, 35.0), (25.0, 35.0), # polygon
            (30.0, 20.0), (30.0, 30.0), (40.0, 30.0), (40.0, 20.0)] # hole in polygon

edges = [(0, 1), (1, 2), (2, 3), (3, 0), # polygon
         (4, 5), (5, 6), (6, 7), (7, 4)] # hole in polygon

Ghi chú: Đối với các đa giác phức tạp hơn với hơn 100 đỉnh và cạnh pySkeleton chậm một cách khó tin. Bên cạnh đó tôi nhận được kết quả lạ cho một số đa giác. Tôi cho rằng nó không hoạt động chính xác trong mọi trường hợp.

Tuy nhiên, cảm ơn rất nhiều đến Olivier Teboul cho thư viện này.

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.