如何使用Python计算直形骨骼?


12

是否有Python包提供了Straight Skeleton算法的实现?

我知道开源(C ++)项目CGAL包含一个实现,但似乎cgal-bindings不包含此CGAL包

无论如何,我都希望使用纯Python实现,可以对其进行修改/扩展以满足自己的需求。

尽管可以处理带孔多边形的实现是可取的,但并非绝对必要。


1
您是否测试过pySkeleton或Skeletron
Farid Cheraghi 2015年

我尝试了pySkeleton。GUI应用程序不适用于我,并且我还没有时间检查代码是否可挽救
Underdark

导入多边形顶点= [(0,0),(0,5),(5,5),(5,0)]边= [(0,1),(1,2),(2,3), (3,0)] p =多边形。多边形(顶点,边线)skateline_graph = p.straight_skeleton()__________________________________________________在执行上述操作时,出现以下错误:_________ Traceback(最近一次调用):文件“ C:\ pySkeleton \ pySkeleton \ test.py”,在<模块>中的第6行,p =多边形(多边形,顶点,边)。文件“ C:\ pySkeleton \ pySkeleton \ polygon.py”,在第44行,init self.vertices = map(点,顶点)TypeError:__init __()恰好接受3个参数(给定2个)
ramesh

Answers:


6

也许你可以修改pySkeleton由Olivier Teboul满足您的需求。

我还没有机会看一下实际的代码,但是从他所说的角度来看,它应该是纯Python


3

您可以按如下方式使用pySkeleton

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()

您将获得一个带有节点和弧的图对象,您可以通过以下方式简单地进行访问:

nodes = skeleton_graph.nodes
arcs = skeleton_graph.arcs

就像在pySkeleton readme.txt中说的那样,多边形顶点需要按顺时针顺序排列。对于多边形内的孔,顶点需要按逆时针顺序排列。

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

注意:对于具有100+个顶点和边的更复杂的多边形,pySkeleton的速度实在是太慢了。除此之外,我收到一些多边形的奇怪结果。我认为它在所有情况下均无法正常工作。

尽管如此,还是非常感谢Olivier Teboul提供的这个库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.