Python에서 특정 점이 다각형 내부에 포함되어 있는지 빠르게 확인하려면 matplotlib.path 모듈의 Path 클래스를 활용하는 것이 가장 간단하고 효율적인 방법입니다. 다각형을 mplPath.Path 객체로 생성한 뒤, contains_point() 메서드를 호출하면 해당 점이 다각형 안에 있는지 여부를 불리언 값으로 즉시 반환받을 수 있습니다.
확인 절차
다각형을 구성할 정점(vertex) 좌표들의 리스트를 준비합니다.
mplPath.Path()를 사용하여 주어진 정점들로 새로운 경로(path) 객체를 생성합니다.contains_point()메서드로 점 (200, 100)이 다각형 내부에 있는지 확인합니다. 닫힌 경로가 해당 점을 포함하면 True를 반환합니다.같은 방식으로 점 (1200, 1000)이 다각형 내부에 있는지 확인합니다. 이 점은 다각형 밖에 있으므로 False를 반환합니다.
예제 코드
import matplotlib.path as mplPath
import numpy as np
poly = [190, 50, 500, 310]
poly_path = mplPath.Path(np.array([[190, 50],
[50, 500],
[500, 310],
[310, 190]]))
point = (200, 100)
print(point, " is in polygon: ", poly_path.contains_point(point))
point = (1200, 1000)
print(point, " is in polygon: ", poly_path.contains_point(point))
실행 결과
(200, 100) is in polygon: True (1200, 1000) is in polygon: False
추가 팁
contains_point()는 단일 점 검사에 최적화되어 있어 속도가 매우 빠릅니다. 만약 수천 개 이상의 점을 한 번에 검사해야 한다면, 동일한 Path 객체의 contains_points() 메서드에 좌표 배열을 전달하는 것이 반복문보다 훨씬 효율적입니다. 또한 지리 데이터나 복잡한 기하 연산이 필요한 경우에는 Shapely 라이브러리의 Polygon.contains() 또는 Point.within() 메서드를 대안으로 고려할 수 있습니다.