세그먼트 S와 폴리곤 P가 주어지면 S 교차 교차 폴리곤 P의 서브 세그먼트의 총 길이를 반환하는 빠른 알고리즘이 있습니까?2D의 다각형과 교차하는 세그먼트의 길이 계산
참고 : P는 닫힌 LineString (즉, 첫 번째 점과 마지막 점이 같은 점의 배열)에 의해 정의됩니다. P는 어떤 "구멍"도 가지지 않지만, 오목하거나 자기 교차 할 수 있습니다.
참고 : 최종 목표는 교차하는 모든 하위 세그먼트의 총 길이이며, 모든 하위 세그먼트를 명시 적으로 검색하지 않고 더 빨리 수행 할 수 있다면 더 좋습니다.
보너스 포인트 : 상기 알고리즘에 대한 Java 구현. 결과 솔루션이 빠르면 JTS와 같은 라이브러리를 사용할 수 있습니다.
JTS를 사용하는 간단한 솔루션은 이미 존재하지만 자체 교차 폴리곤을 지원하지 않으며, 가장 빠르지 않습니다. 이 솔루션에는 다각형 객체 (P의 경우), 두 점의 LineString 객체 (S의 경우) 및 결과 교차 길이 가져 오기가 포함됩니다. 여기
이 수행하는 코드입니다 :GeometryFactory fact = new GeometryFactory();
WKTReader wktRdr = new WKTReader(fact);
String wktP = "POLYGON((40 100, 40 20, 120 20, 120 100, 60 40, 40 100))";
String wktS = "LINESTRING(20 60, 160 60)";
Geometry pl = wktRdr.read(wktP);
Geometry ls = wktRdr.read(wktS);
Geometry in = pl.intersection(ls);
System.out.println("P = " + pl);
System.out.println("S = " + ls);
System.out.println("P intersection S = " + in);
System.out.println("S length = " + ls.getLength());
System.out.println("P intersection S length = " + in.getLength());
편집 : 자기 교차 다각형에 대한 고려 : 솔루션, 어쩌면 가장 빠른, 분할에 의해 사전 처리 자체 교차하는 다각형을 포함 할 수 없습니다 있지만, 그것을 여러개의 비 자기 교차하는 것들로 묶는다.
일부 설명과이 문제에 대한 몇 가지 의사 코드 현재 위치 : Algorithm to split self-intersected Path2D into several not self-intersected paths?
감사 합니다만, 빠르지 만 불행하게도 자체 교차 폴리곤을 처리해야합니다. – Sergio
이전 알고리즘은 선형 시간의 볼록한 다각형에만 작용했습니다. 이 알고리즘은'O (n * log n)'에있는 자기 교차 폴리곤을 제외한 모든 폴리곤에 적용됩니다. 누군가가 자기 교차 폴리곤을 확장하는 것을 보게되어 기쁩니다. :) – EthanB