Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 점이 다각형 내부에 있는지 확인하는 가장 빠른 방법

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() 메서드를 대안으로 고려할 수 있습니다.