평면상의 다각형에 점이 있는지 여부를 결정합니다.

아래 그림과 같이 (5,5), (10,5), (10,10), (5,10)의 파란색 점으로 둘러싸인 직사각형이 있다고 가정합니다.



여기서, 다음과 같이 (7,8)의 오렌지 점과 (12,10)의 녹색 점이있을 때 직사각형에 있는지 여부를 결정하는 방법을 소개한다.


Shapely 라는 라이브러리를 이용한다.
이것은 GEOS를 기반으로 한 파이썬 라이브러리로, 평면상의 기하학적 도형의 분석과 조작에 사용된다.

참고 : htps : // py 피. 오 rg/p 로지ぇct/샤페 ly/
$ pip install shapely

사각형 안에 점이 있는지 여부



이하의 코드로 확인할 수 있다.
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

point = Point(7,8)
polygon = Polygon([(5,5), (10,5), (10,10), (5,10)])
print(polygon.contains(point)) # True

point = Point(12,10)
polygon = Polygon([(5,5), (10,5), (10,10), (5,10)])
print(polygon.contains(point)) # False

경계상의 점은 직사각형 내의 점이 아니라고 판정된다.
point = Point(5, 5)
polygon = Polygon([(5,5), (10,5), (10,10),(5,10)])
print(polygon.contains(point)) # False

5점 이상인 경우



아래 그림과 같이 5점 있다면 어떻게 할까? ( (7.5, 12.5) 추가.)


point = Point(7.5, 7.5)
polygon = Polygon([(5,5), (10,5), (10,10),(5,10), (7.5,12.5)]) # ここに追加するだけ。
print(polygon.contains(point)) # True

대상의 도형을 볼록포로서 판정하고 싶은 경우는, 이하에서 확인 가능하다.
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
from shapely.geometry import MultiPoint


point = Point(7.5, 7.5)
polygon = MultiPoint([(5,5), (10,5), (10,10),(5,10), (7.5,12.5)]).convex_hull
print(polygon.contains(point)) # True

이 경우에도 경계상의 점은 False로 판정된다.

좋은 웹페이지 즐겨찾기