위키득계정 ↗
기술

반평면 교집합

반평면 교집합기술
영어
Half-plane intersection
입력
여러 반평면
출력
모든 조건을 동시에 만족하는 영역
대표 알고리즘
방향 정렬과 덱을 이용한 O(n log n) 해법
반평면 교집합은 평면을 직선으로 나눈 한쪽 영역들을 동시에 만족하는 점의 집합이다. 경계를 포함하는 반평면은 ax+by≤c와 같은 일차부등식으로 나타낼 수 있으며, 여러 조건의 공통 해를 기하적으로 구하는 문제로 다룬다.

부등식이 만드는 영역

a와 b가 모두 0이 아닐 때 ax+by=c는 경계 직선이고 ax+by≤c는 그 직선을 포함하는 한쪽 반평면이다. 부등호가 엄격하면 경계를 제외한다. 경계를 포함하는지에 따라 접하는 점과 선분을 공통 영역으로 인정할지가 달라지므로 입력의 의미를 먼저 정해야 한다.

조건을 동시에 만족하기

x≥0, y≥0, x+y≤4를 함께 적용하면 꼭짓점이 (0,0), (4,0), (0,4)인 삼각형 영역을 얻는다. 반면 x≥2와 x≤1은 동시에 만족할 수 없어 교집합이 비어 있다. 조건을 더할 때 공통 영역은 커지지 않으며 그대로 유지되거나 줄어든다.

결과의 다양한 형태

반평면은 볼록하므로 이들의 교집합도 볼록하다. 하지만 결과가 언제나 넓이를 가진 유한한 다각형인 것은 아니다. 무한히 뻗는 영역이나 띠, 직선, 선분, 한 점 또는 공집합이 나올 수 있다. 유한한 다각형만 반환하는 구현을 사용할 때는 어떤 경우를 지원하는지 구분해야 한다.

정렬과 경계 관리

대표적인 알고리즘은 경계 직선의 방향을 정렬하고 덱에 유효한 경계를 유지하며 새 조건을 처리한다. 정렬을 포함한 시간 복잡도는 O(n log n)이다. 평행한 경계의 방향과 제한 범위를 비교해야 하며, 계산 편의상 큰 사각형을 추가했다면 그 결과는 원래 영역을 사각형 안으로 자른 것임을 기억해야 한다.

관련 문서

일차부등식 / 교집합 / 볼록집합 / 직선 / 덱 / 시간 복잡도