Для тех, кто заинтересован, мне удалось решить мою проблему. Используя shapely
и descartes
(простую установку в пипсах),
from shapely.geometry.polygon import Polygon
from shapely.geometry import Point
from descartes import PolygonPatch
вы можете создать необходимый многоугольник с помощью функции Polygon
, передав ему кортеж с полями x и y обоих кривые прилагаются. Вы можете создать многоугольный патч с помощью функции PolygonPatch
из shapely и построить его с помощью:
ax.add_patch(name_of_your_patch)
Чтобы проверить, включена ли точка в многоугольник, вы можете создать объект Point
с фигурной и функция:
name_of_your_polygon.contains(point)
вернет логическое значение.
Вот пример сценария (не забудьте импортировать shapely
и descartes
):
main=rand(4,2)
main=tuple(map(tuple,main)) #Transform into tuple
poly=Polygon(main) #Create filling Polygon
poly_patch=PolygonPatch(poly) #Create Polygon Patch
fig = plt.figure()
ax = fig.add_subplot(111)
ax.add_patch(poly_patch) #Draws the patch
point=Point(0.5,0.5)
print(poly.contains(point))
ax.scatter(0.5,0.5,s=10000,color='gold',marker='+')
В приведенном ниже случае функция poly.contains(point)
возвращает True
.
Пример: