파이썬을 사용하여 직선 스켈레톤을 계산하는 방법?


12

Straight Skeleton 알고리즘의 구현을 제공하는 Python 패키지가 있습니까?

오픈 소스 (C ++) 프로젝트 CGAL에 구현이 포함되어 있지만 cgal-bindings 에이 CGAL 패키지가 포함되어 있지 않은 것 같습니다 .

어쨌든 필자는 필요에 맞게 수정 / 확장 할 수있는 순수한 Python 구현을 선호합니다.

구멍이있는 다각형을 처리 할 수있는 구현이 바람직하지만 반드시 필요한 것은 아닙니다.


1
pySkeleton 또는 Skeletron 을 테스트 했습니까 ?
Farid Cheraghi

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 () __________________________________________________ 위에서 실행하는 동안 다음 오류가 발생했습니다. _________ 역 추적 (가장 최근 호출) : 파일 "C : \ pySkeleton \ pySkeleton <모듈>의 \ test.py ", 6 행 p = polygon.Polygon (vertices, edge) init self.vertices = map (Point, 정점) 형식 오류 : __init는 __ () 정확히 3 개 인수 (이 소요 주어진)
라 메쉬

답변:


6

어쩌면 당신은 수정할 수 pySkeleton을 필요에 맞게 올리비에 Teboul에 의해.

나는 실제 코드를 볼 기회가 없었지만 그가 말한 것에서 순수한 파이썬 이어야한다고 말했다 .


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에게 감사드립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.