我一直在寻找一个替代MATLAB的inpolygon()的python,我发现contains_points是一个不错的选择。
但是,这些文档有点赤裸裸,没有指出points期望的数据类型:
contains_points(points, transform=None, radius=0.0)
Returns a bool array which is True if the path contains the corresponding point.
If transform is not None, the path will be transformed before performing the test.
radius allows the path to be made slightly larger or smaller.
我把多边形存储为一个n*2numpy数组(其中n相当大~500)。据我所见,我需要对这些数据调用Path()方法,它似乎工作正常:
poly_path = Path(poly_points)
目前,我还将要测试的点存储为另一个n*2numpy数组(catalog_points)。
也许我的问题就在这里?当我跑的时候:
in_poly = poly_path.contains_points(catalog_points)
我得到一个包含每个值“False”的ndarray,不管我使用的点集是什么(我已经在多边形内的点数组上测试过了)。
通常在这种情况下,我发现源头是有启发性的。。。
我们可以看到^{} 的源接受至少有两个元素的容器。} 。此函数似乎接受一个iterable,该iterable生成长度为2的元素:
contains_points
的源代码比较难理解,因为它调用了C函数^{当然,我们也可以使用点的numpy数组:
为了确认我们并非总是得到
True
:我编写此函数是为了返回一个数组,如
matlab
inpolygon
函数中所示。但这将只返回给定多边形内的点。使用此函数无法在多边形的边上找到点。可以将函数调用为:
在^{} documentation 这个函数中
确保顶点按要求排列。波纹状顶点的排列方式是绘制三角形而不是矩形。因此,它不会为矩形内的点创建true,而是为三角形内的点创建true。
如果bfp3和bfp4的顺序正确的话,第一点是正确的。
相关问题 更多 >
编程相关推荐