가장 가까운 점으로 평면을 나누기
점 집합 \(P = \{p_1, \dots, p_n\}\)이 있을 때, 평면의 각 위치를 "가장 가까운 \(p_i\)"에 따라 색칠한 것이 보로노이 다이어그램이다. \(p_i\)의 셀은
$$ \text{Vor}(p_i) = \{q : \|q - p_i\| \le \|q - p_j\|,\ \forall j\}. $$
각 셀은 볼록 다각형(반평면들의 교집합)이다. \(\|q-p_i\| \le \|q-p_j\|\)는 두 점의 수직이등분선이 만드는 반평면이기 때문이다.
구조적 사실
- 보로노이 정점: 세 점에서 등거리인 점(세 셀의 만남) → 그 세 점의 외접원 중심.
- 보로노이 변: 두 점의 수직이등분선의 일부.
- 정점/변/면 수는 모두 \(O(n)\) (오일러 공식 \(V - E + F = 2\)).
델로네 삼각분할: 쌍대
보로노이의 쌍대 그래프가 델로네 삼각분할(Delaunay triangulation) 이다. 두 점의 보로노이 셀이 변을 공유하면, 델로네에서 그 두 점을 잇는다.
델로네의 정의적 성질(empty circle property):
삼각형 \(\triangle p_i p_j p_k\)가 델로네에 속할 필요충분조건은, 그 외접원 내부에 다른 점이 없는 것이다.
이는 보로노이 정점이 외접원 중심이라는 사실과 정확히 대응한다.
델로네의 최적성
델로네 삼각분할은 가능한 삼각분할 중 최소각을 최대화한다(maximize the minimum angle). "가늘고 긴 삼각형"을 피하므로 보간/메시 생성에서 선호된다. 또한:
- 유클리드 최소 신장 트리(EMST) 는 델로네의 부분 그래프다.
- 최근접 점 쌍 의 두 점은 델로네 변으로 연결되어 있다.
따라서 델로네만 \(O(n \log n)\)에 구하면 EMST, 최근접 쌍 등이 따라온다.
위로 들어 올리기(lifting)
\((x, y) \mapsto (x, y, x^2 + y^2)\)로 점을 포물면에 올리면, 델로네 삼각분할은 그 점들의 하부 볼록껍질(lower convex hull) 의 면들과 일치한다. in-circle 판정이 3D orientation(부피의 부호) 판정으로 바뀐다.
$$ \text{inCircle}(a,b,c,d) = \operatorname{sign}\det\begin{pmatrix} a_x-d_x & a_y-d_y & (a_x-d_x)^2+(a_y-d_y)^2 \\ b_x-d_x & b_y-d_y & (b_x-d_x)^2+(b_y-d_y)^2 \\ c_x-d_x & c_y-d_y & (c_x-d_x)^2+(c_y-d_y)^2 \end{pmatrix} $$
부호가 양이면 \(d\)가 \(\triangle abc\)의 외접원 내부.
알고리즘 선택
| 방법 | 복잡도 | 비고 |
|---|---|---|
| Fortune sweepline | \(O(n \log n)\) | 보로노이 직접 |
| 분할정복 델로네 | \(O(n \log n)\) | 구현 까다로움 |
| 점진적 삽입 + flip | 기대 \(O(n \log n)\) | 무작위화 |
| 3D 볼록껍질 lifting | \(O(n \log n)\) | 코드 재사용 |
다음 강의에서 점진적 삽입(증분) 델로네를 본다.