Нахождение точек, содержащихся между двумя кривыми - PullRequest
0 голосов
/ 16 января 2020

Я столкнулся с небольшой проблемой и нигде не смог найти удовлетворительного ответа.

Я ищу, чтобы найти точки, содержащиеся между двумя кривыми, с учетом того, что обе кривые являются своего рода параметрами c и не имеют одинакового количества x-элементов.

Функция matplotlib fill отлично работает, чтобы заполнить полигонами область между кривыми. Я наткнулся на функцию contains_point из matplotlib_path, но не могу найти способ получить свойства вывода matplotlib.patches.Polygon из fill для ее использования.

Есть ли способ использовать это, или я должен использовать другой возможный подход, непосредственно делая то, что функция fill делает для получения многоугольника (но как)?

График, иллюстрирующий проблему: Plot illustating the problem

1 Ответ

0 голосов
/ 20 января 2020

Для тех, кто заинтересован, мне удалось решить мою проблему. Используя 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.

Пример:

...