주어진 원들을 분리하는 영역들

한 볼록다각형 P 내부에 n개의 원들이 있어, 어떤 두 원을 잡아도 서로 겹치지 않고 하나가 다른 하나의 내부에 있지 않았다고 한다. 이 때, P 내부의 영역을 n개의 볼록다각형 영역으로 분할하여, 각각의 영역이 정확히 한 개의 주어진 원이 들어가게 할 수 있다.

예전에 후배가 풀어보라고 던져줬는데 얼떨결에 그 자리에서 보자마자 키 아이디어를 맞춰버려서 내 기억엔 훈훈한 문제로 남아있다… 문제에서는 볼록다각형 내부에서 잡는 것으로 되어 있지만 사실 별 필요 없는 조건이고 그냥 평면 전체에서 생각해도 된다. 단 등장하는 영역은 볼록다각형이 아니라 경계가 유한개의 선분이나 반직선으로 이루어진 볼록도형이라고 고쳐야 함. 원래 문제로 돌아가려면 그냥 P와의 교집합 씌워주면 된다.

분할이 완성된 그림을 떠올려보면 직관적으로 어떤 개념 하나가 떠오르게 되는데, 바로 근축(radical axis)이다. 근축이란 두 원에 대한 방멱(power; 중심이 O이고 반지름이 r인 원에 대한 같은 평면 위의 점 P의 방멱은 OP^2-r^2로 정의된다)이 같은 점들의 자취로, 보통 직선이 됨이 알려져 있다. 또한 두 원이 겹치지 않고 하나가 다른 하나 내부에 들어가있지 않은 상황이라면 이 직선은 평면을 두 개의 반평면으로 나누고 각각에 원 하나씩이 들어간다. \binom{n}{2}개의 근축들을 그리면서 생각해보면, 문제의 조건을 만족시키는 n개의 볼록다각형들의 선분을 근축들의 부분집합으로 잡는 것으로 해결할 수 있다.

이를 조금 더 간결하게 표현하기 위해, 각각의 원을 C_1,C_2, \ldots,C_n이라 하고, 원 C에 대한 점 P의 방멱을 편의상 \mathcal{P}(C,P)라고 쓸 때, 영역 Q_i\{P: \mathcal{P}(C_i,P) \leq \mathcal{P}(C_j,P)\text{ for }j \neq i \}로 정의한다. 즉 C_i에 대한 방멱이 다른 원들에 대한 방멱보다 작거나 같은 동일 평면 상의 점 P들의 집합으로 잡는다. 영역 R_{i,j}
\{P: \mathcal{P}(C_i,P) \leq \mathcal{P}(C_j,P) \}로 정의하면 \displaystyle Q_i = \cap_{j \neq i} R_{i,j}가 되는데, 각각의 영역 R_{i,j}는 두 원 C_i,C_j의 근축으로 나뉘는 반평면 중 하나로 볼록도형이 되고 그들의 교집합 역시 볼록도형이 된다. 또한 유한개의 집합의 교집합이므로 Q_i의 경계는 반드시 유한개의 선분 혹은 반직선(근축들의 일부)이 되어야 해 증명이 끝난다.

나중에 보로노이 다이어그램(Voronoi diagram)이라는게 있다는걸 알았다. 점들이 주어져 있으면 각각의 점을 포함하는 볼록도형들로 평면을 분할할 수 있다는 내용으로 두 점 사이를 잇는 선분의 수직이등분선들로 잡는다. 즉 한 점에 대해 그 점에 이르는 거리가 다른 점에 이르는 거리보다 작거나 같은 점들의 집합을 각각의 영역으로 잡는데, 앞서 본 문제에서 모든 원들이 반지름이 0인 점원인 경우로 생각하면 일치한다. 또한 찾아보니 원래 문제에서 근축들을 이용해 그린 그림은 power diagram이라고 불리며 Laguerre-Voronoi diagram, Dirichlet cell complex 등 여러 이름으로 기존 논문들에서 등장하기도 했었다고. 정의를 그대로 두고 3차원 이상으로 일반화하는 것도 가능하다. 이와 관련된 결과 등에 대해서는 [1]을 참조.

Elegant Math 계정에서 작성한 트윗 타래를 정리. (2016/07/28)

References

[1] F. Aurenhammer, “Power Diagrams: Properties, Algorithms and Applications” SIAM J. Comput., 16(1), 78-96. DOI: 10.1137/0216006

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중