Vous pouvez utiliser pySkeleton comme suit:
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()
Vous obtenez un objet graphique avec nœuds et arcs, auquel vous pouvez accéder simplement en:
nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs
Comme il est dit dans le fichier readme.txt de pySkeleton, les sommets des polygones doivent être dans le sens des aiguilles d'une montre. Pour les trous dans le polygone, les sommets doivent être dans le sens antihoraire.
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
Remarque: pour les polygones plus complexes avec plus de 100 sommets et arêtes, pySkeleton est incroyablement lent. En plus de cela, je reçois des résultats étranges pour certains polygones. Je suppose que cela ne fonctionne pas correctement dans tous les cas.
Un gros merci à Olivier Teboul pour cette bibliothèque.