[英]Finding if points are contained between two curves
我遇到了一点问题,在任何地方都找不到令人满意的答案。
我正在寻找两条曲线之间包含的点,事实上两条曲线都是参数化的,并且没有相同数量的 x 元素。
matplotlib 函数fill
可以完美地用多边形填充曲线之间的区域。 我偶然发现了来自matplotlib_path
的contains_point
函数,但我找不到从fill
获取matplotlib.patches.Polygon
输出的属性以使用它的方法。
有没有办法使用它,或者我应该采取另一种可能的方法,通过直接执行fill
函数来获取多边形(但如何)?
说明问题的图:
对于任何感兴趣的人,我设法解决了我的问题。 使用shapely
和descartes
(一个简单的 pip install 就可以了),
from shapely.geometry.polygon import Polygon
from shapely.geometry import Point
from descartes import PolygonPatch
您可以使用Polygon
函数创建所需的多边形,方法是向它提供一个附加了两条曲线的 x 和 y 的元组。 您可以使用PolygonPatch
函数从PolygonPatch
创建多边形补丁并使用以下方法绘制它:
ax.add_patch(name_of_your_patch)
要检查多边形内是否包含一个点,您可以使用 shapely 和函数创建一个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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.