2017-03-29 18 views
0

私の質問は簡単ですが、解決策は非常に難しいかもしれません。私は三角形のコレクションを持っており、私はそれらの和集合を探したい。三角形は、標準的な方法で与えられる:cascaded_union(ポリゴン)周辺ポイントインデックスを復帰する

点:

各行は、その頂点のインデックスで指定された三角形である座標点(各点について2点の座標)との接続のリストのリストで
[ 15.02716923 81.72425842] 
[ 21.42242702 79.91459549] 
[ 24.87068939 79.0222168 ] 
[ 29.25767326 77.96657562] 
[ 34.07667923 76.65890503] 

三角形:

7 8 9 
8 18 20 
8 20 10 
8 10 9 
9 10 11 
9 11 108 

私は非常に効率的にcascaded_unionを使用して組合を見つけることができます。

import shapely.geometry as geometry 
from shapely.ops import cascaded_union, polygonize 

polys = [geometry.Polygon([[points[point, 0], points[point, 1]] for point in triangle]) for triangle in triangles] 
result = cascaded_union (polys) 

問題は、結果として得られるポリゴンの座標を与えることです。一方、私は円のほうが、最初のpoints配列の添え字としてresultを望んでいます。これまで私はこれを行う方法を見つけていない。 1つの方法は、座標自体の代わりにポイントインデックスを吐き出す独自の結合関数を書くことです。

+0

を意味するのでしょうか? –

+0

@BillBellいいえ、私は凹型の船体が必要です。しかし、既に三角形の接続が分かっているので、アルファの形を見つける必要はありません。だから私はそれらをマージし、結果の形状を生成する必要があります。 – John

+0

あなたのリストにない組合の外輪のポイントから何を得ると思いますか? (これは容易に起こり得る)。 – eguaio

答えて

0

ユニオンが常にリストからポイントを持つポリゴンを返す場合は、インデックスだけを参照できます。座標のタプルが使用するインデックス(コードでcoord_to_pointer命名)を指す辞書を構築し、その後、あなたは簡単にインデックスを取得することができます。これは、あなたが凸包を望んでいることを

polys = [geometry.Polygon([[points[point, 0], points[point, 1]] 
          for point in triangle]) for triangle in triangles] 
result = cascaded_union (polys) 
geom_indexes = [coord_to_pointer[p] for p in list(result.exterior.coords)] 
関連する問題