🏞️ GIS & RS/📚 GIS (지리정보시스템)

[GIS] 보로노이 다이어그램(Voronoi diagram)

김 홍시 2024. 7. 5.
반응형

보로노이 다이어그램(Voronoi diagram)은 주어진 평면 상의 여러 점 집합에 대해 평면을 여러 개의 영역으로 나누는 방법을 말합니다. 각 영역은 하나의 점과 가장 가까운 모든 위치를 포함합니다. 이러한 각 영역을 보로노이 셀(Voronoi cell)이라고 하며, 이를 구성하는 점들을 사이트(site)라고 합니다.

보로노이 다이어그램의 특징

  1. 보로노이 셀: 각 보로노이 셀은 하나의 사이트와 가장 가까운 모든 점으로 구성됩니다.
  2. 보로노이 경계: 두 사이트 사이의 중간 경계선은 그 두 사이트로부터의 거리가 동일한 모든 점으로 이루어져 있습니다.
  3. 보로노이 정점: 세 개 이상의 보로노이 셀이 만나는 점을 보로노이 정점(Voronoi vertex)이라고 합니다.

보로노이 다이어그램의 생성 예시

주어진 2차원 평면 상에 n개의 점이 있을 때, 각 점은 평면을 자신의 영향력 하에 두고, 다른 점들과의 거리에 따라 경계선을 그리게 됩니다. 이렇게 해서 만들어진 경계선들이 보로노이 다이어그램을 형성하게 됩니다.

보로노이 다이어그램의 응용

  1. 지리학: 특정 지점(예: 도심, 병원, 소방서 등)으로부터의 영향권 분석.
  2. 컴퓨터 그래픽스: 이미지 세그멘테이션, 패턴 생성.
  3. 로봇 공학: 로봇의 경로 계획.
  4. 통신 네트워크: 기지국의 서비스 범위 분석.

예제

다음은 주어진 몇 개의 점을 기준으로 보로노이 다이어그램을 생성하는 예제입니다.

  1. 필요한 라이브러리 설치 및 임포트
pip install scipy matplotlib numpy
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
  1. 보로노이 다이어그램 생성 및 시각화
# 임의의 점 생성
points = np.random.rand(10, 2)

# 보로노이 다이어그램 생성
vor = Voronoi(points)

# 보로노이 다이어그램 시각화
fig, ax = plt.subplots()
voronoi_plot_2d(vor, ax=ax)

# 원래 점 표시
ax.plot(points[:, 0], points[:, 1], 'bo')

# 그래프 표시
plt.show()

이 코드는 2차원 평면에 임의의 10개의 점을 생성하고, 이 점들을 기반으로 보로노이 다이어그램을 생성하여 시각화합니다. scipy.spatial.Voronoi 함수는 주어진 점들로부터 보로노이 다이어그램을 계산하며, voronoi_plot_2d 함수는 이를 2차원으로 시각화합니다.

보로노이 다이어그램의 구조

보로노이 다이어그램은 다음과 같은 구성 요소로 이루어져 있습니다:

  • 점 (sites): 다이어그램을 구성하는 기본 점들.
  • 보로노이 셀 (Voronoi cells): 각 점에서 가장 가까운 영역.
  • 보로노이 경계 (Voronoi edges): 두 셀 간의 경계.
  • 보로노이 정점 (Voronoi vertices): 셀이 만나는 점들.

이러한 다이어그램은 평면 분할 및 다양한 최적화 문제에서 중요한 도구로 사용됩니다.

반응형

댓글