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.