Pythonを使用してストレートスケルトンを計算する方法は?


12

ストレートスケルトンアルゴリズムの実装を提供するPythonパッケージはありますか?

オープンソース(C ++)プロジェクトCGALには実装が含まれていることは承知していますがcgal-bindingsにはこのCGALパッケージが含まれていないようです

いずれにせよ、私は自分のニーズに合わせて修正/拡張できる純粋なPython実装を好むでしょう。

穴のあるポリゴンを処理できる実装が望ましいが、厳密に必要というわけではない。


1
pySkeletonまたはSkeletronをテストしましたか?
ファリドチェラギ

pySkeletonを試しました。GUIアプリケーションでは、私のために仕事をしませんでしたし、私は時間を見つけていない、まだコードが救出あるかどうかを確認するために
アンダーダーク

インポート多角形の頂点= [(0,0)、(0,5)、(5,5)、(5,0)]エッジ= [(0,1)、(1,2)、(2,3)、 (3,0)] p = polygon.Polygon(vertices、Edges)skeleton_graph = p.straight_skeleton()__________________________________________________上記の実行中に、次のエラーが発生しました。 \ test.py "、6行目<モジュール> p = polygon.Polygon(vertices、edges)ファイル" C:\ pySkeleton \ pySkeleton \ polygon.py "、行44、init self.vertices = map(Point、頂点)TypeError:__
init

回答:


6

たぶん、あなたは変更することができpySkeletonを、ニーズに合わせてオリヴィエ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とArcsを持つGraph-Objectを取得します。これには、次の方法で簡単にアクセスできます。

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に感謝します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.