일련의 교차 선에서 다각형 생성


10

이것은 이미 다른 목적으로 요청 된 간단하고 매우 일반적인 질문입니다 (예 : 이 링크이것도 참조 ). 그러나 우리는 소프트웨어 패키지가 아니라 구현하려고 시도 할 수있는 알고리즘 을 찾고 있습니다 . 파이썬 .

따라서 아래에 표시된 것처럼 일련의 선이 매핑됩니다 (BTW는 이미 잘림).
다각형을 생성하는 알고리즘 / 아이디어 (빨간색으로 표시) ?

여기에 이미지 설명을 입력하십시오


외부 사각형 경계가 입력 라인에서 읽히거나 알고 있습니까?
Devdatta Tengshe

답변:


5

글쎄, 우리는 여기 에 우리의 질문에 대한 완전한 답이 아닌 답을 넣습니다. 즉, 질문은 "답변 할 수 있도록 열려 있습니다 ". 그러나 문제의 문제에 대한 해결책입니다. 우리가 사용한 트릭은 다음과 같습니다.

먼저 결과를 보자 .
여기에 이미지 설명을 입력하십시오

따라서 left빌드 된 다각형 의 주어진 선은에 표시됩니다 middle. right;)에 표시된 것처럼 실제 다각형입니다 .

아래 주어진 알고리즘을 위해 우리 Shapely파이썬 패키지를 사용 했습니다 .

  • 줄 ==> MultiLineString {:: M}
  • {:: MB} buffer와 같이 작은 것을 추가하십시오eps
  • region ==> Polygon {:: P} (여기서 지역은 정사각형입니다)
  • P.difference(MB) {결과 다각형}

참고 그것은 작동 조용한 빨리는 것을. 그러나 누락 된 점은 알고리즘 이 선에서 다각형을 작성하는 원래의 방법이 아니라는 것 입니다. 그럼에도 불구하고 그것은 우리가 겪은 문제에 완벽하게 작동했습니다.


4

JTS Topology Suite 에는 Polygonizer 클래스가 있습니다.

여기 에서 사용할 수 있는 소스 코드를 살펴보고 이를 파이썬으로 변환 할 수 있습니다 .


코드 설명에 따르면 질문 작성자가 예상 한대로 작동하지 않습니다. "가장자리가 올바르게 노드되어야합니다. 즉, 끝점에서만 만나야합니다. Polygonizer는 잘못 노드 된 입력에서 실행되지만 노드 가장자리 "
Pablo

1
정점에서 선을 올바르게 분할하기 위해 JTS 내에 작업이 있습니다. 아마 OP도 그것을 볼 수 있습니다.
Devdatta Tengshe

3

Python Shapely 패키지, 특히 polygonize ()를 살펴볼 수 있습니다


Shapely ( from shapely.ops import polygonize) 에서 다각형 화하는 빠른 참고 사항 은 GEOS 에서 GEOS.Polygonize 를 사용합니다 . 따라서 이것은 링크에 대한 링크가있는 링크입니다 ... : |
개발자

에 대한 시험 polygonize은 전혀 성공하지 못했습니다. 그러나 Shapely답변으로 게시 된 솔루션 (실제로 트릭)을 찾을 수있는 것을 상기시켜 주셔서 감사합니다 .
개발자

2

우리가 찾을 수있는 또 다른 해결책이 있습니다.

를 사용하면 DCEL선을 만지지 못하게 할 수 있습니다.

들어 파이썬 패키지가 {여기} . 약간의 버그가있는 작은 구현입니다. 그럼에도 불구하고 약간의 노력 으로이 문제에 사용할 수 있습니다. 다음 단계도 참고하십시오.

선 사이의 모든 교차점이 발견되는 전처리 단계. 따라서 모든 선이 상호 작용 지점에서 세그먼트로 분할됩니다. 교차점 목록과 관련 모서리 목록은 DCEL에 필요한 것입니다.


이 방법은 독창적 인 솔루션이므로 다른 방법을 사용하는 것보다 성능이 훨씬 우수합니다 difference.
개발자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.