이 문제에는 많은 유효한 해결책이 있습니다. 그중 하나는 설명과 약간 비슷하지만 "무작위"위치에서 다각형을 자르는 대신 계산량을 최소화하도록 의도적으로 의도적으로 수행 할 수 있습니다.
기본 알고리즘은 다음과 같습니다. 입력 어떤 스위프 평면 방향으로 구성 다각형 P 제로 영역의 타겟 영역 제로 다각형의 영역 및 음이 아닌 임계치 사이 t (단위 영역). 그 목적은 스위프 방향에 직교하는 선이있는 P 를 선의 오른쪽과 선의 왼쪽에있는 두 부분으로 분할하여 오른쪽 영역과 대상 영역 a의 차이 가 t 보다 큽니다 .
L을 스윕 방향에 수직 인 방향 선으로 하자 . f (L)을 L의 오른쪽에있는 P의 면적에서 a를 뺀 값으로 정의 합니다 . 이러한 측면에서 작업을하는 것입니다 의 제로 찾을 수 F를 . 때문에 F는 미분 될 가능성이지만, 하나의 연속, 사용하는 것입니다 이분법, 시컨트 방법 , 또는 - 내 favorite- -Brent의 방법 . 모두 간단하고 수렴 할 수 있습니다. 인수의 수렴 공차에 t 를 사용하십시오 .
그게 다야. 이것을 코딩하는 데 무엇이 고려되는지 봅시다. 근본적인 발견은 일상적인 것입니다. 일반적인 코드 청크를 사용할 수 있으므로 GIS 작업은 코딩 f로 귀착됩니다 . 그렇게하려면
1. Splitting the polygon by a line.
2. Computing the area of the piece(s) to the right of the line.
두 작업 모두 거의 모든 벡터 기반 GIS에서 구현됩니다. 그렇지 않은 경우 선을 오른쪽의 반 평면을 나타내는 매우 큰 사각형으로 바꿀 수 있습니다. 1 단계는
1'. Clip the polygon to the rectangle.
그것은 정말 기본적인 작업입니다.
루트 찾기를 시작하려면 f 의 0이 놓여 지는 간격을 찾아야합니다 . 이 작업은 쉽습니다. 다각형의 봉투 ( "경계 상자")를 선 스윕 방향으로 투영합니다. 투영은 원하는 간격입니다.
이 질문은 오랜 역사를 가지고 있습니다. 오래 전에 ArcView 3.x에 대해이 알고리즘을 구현했으며 이전 ESRI 사용자 포럼에서 여러 번 설명했습니다. 구글
후버 분할 다각형 사이트 : forums.esri.com
토론, 코드에 대한 링크, 개선 및 변형 (예 : 다각형을 가능한 작은 크기로 원하는 크기로 분할) 및 래스터 데이터 알고리즘.
다음은 미국 대륙의 각 주에서 가장 낮은 3 분의 1이 음영 처리 된 모습입니다 (동일한 지역 투영에서). 분명히 스윕 방향은 수직이었습니다.