查找点是否包含在两条曲线之间
Finding if points are contained between two curves
我遇到了一些问题,但在任何地方都找不到令人满意的答案。
我正在寻找包含在两条曲线之间的点,事实上这两条曲线都是参数化的,并且没有相同数量的 x 元素。
matplotlib 函数 fill
完美地用多边形填充曲线之间的区域。我偶然发现了来自 matplotlib_path
的 contains_point
函数,但我找不到一种方法来获取 fill
输出的 matplotlib.patches.Polygon
的属性来使用它。
有没有办法使用它,或者我是否应该采取另一种可能的方法,直接执行 fill
函数获取多边形的操作(但如何)?
说明问题的情节:
对于任何感兴趣的人,我设法解决了我的问题。
使用 shapely
和 descartes
(一个简单的 pip 安装就可以了),
from shapely.geometry.polygon import Polygon
from shapely.geometry import Point
from descartes import PolygonPatch
您可以使用 Polygon
函数创建所需的多边形,方法是为其提供一个附加了两条曲线的 x 和 y 的元组。您可以使用 shapely 中的 PolygonPatch
函数创建多边形面片,并使用以下方法绘制它:
ax.add_patch(name_of_your_patch)
要检查点是否包含在多边形内,您可以使用 shapely 创建一个 Point
对象和函数:
name_of_your_polygon.contains(point)
将 return 一个布尔值。
这是一个示例脚本(记得导入 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)
函数 returns True
.
Example:
我遇到了一些问题,但在任何地方都找不到令人满意的答案。
我正在寻找包含在两条曲线之间的点,事实上这两条曲线都是参数化的,并且没有相同数量的 x 元素。
matplotlib 函数 fill
完美地用多边形填充曲线之间的区域。我偶然发现了来自 matplotlib_path
的 contains_point
函数,但我找不到一种方法来获取 fill
输出的 matplotlib.patches.Polygon
的属性来使用它。
有没有办法使用它,或者我是否应该采取另一种可能的方法,直接执行 fill
函数获取多边形的操作(但如何)?
说明问题的情节:
对于任何感兴趣的人,我设法解决了我的问题。
使用 shapely
和 descartes
(一个简单的 pip 安装就可以了),
from shapely.geometry.polygon import Polygon
from shapely.geometry import Point
from descartes import PolygonPatch
您可以使用 Polygon
函数创建所需的多边形,方法是为其提供一个附加了两条曲线的 x 和 y 的元组。您可以使用 shapely 中的 PolygonPatch
函数创建多边形面片,并使用以下方法绘制它:
ax.add_patch(name_of_your_patch)
要检查点是否包含在多边形内,您可以使用 shapely 创建一个 Point
对象和函数:
name_of_your_polygon.contains(point)
将 return 一个布尔值。
这是一个示例脚本(记得导入 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)
函数 returns True
.
Example: