2017-03-29 2 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 배열의 인덱스로 사용하고 싶습니다. 지금까지 나는 이것을 할 방법을 찾지 못했습니다. 한 가지 방법은 좌표 자체 대신 점 지수를 내뱉는 자체 결합 함수를 작성하는 것입니다.

+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)]