我一直在寻找 MATLAB 的 python 替代品 inpolygon()
我发现 contains_points
是一个不错的选择。
然而,文档有点空洞,没有说明什么类型的数据 contains_points
期望:
contains_points(points, transform=None, radius=0.0)
返回一个
bool
数组True
如果路径包含相应的点。如果 transform 不是
None
,则路径将在执行测试之前进行转换。radius 允许路径稍微变大或变小。
我将多边形存储为 n
*2 numpy 数组(其中 n
相当大 ~ 500)。据我所知,我需要对此数据调用 Path()
方法,这似乎工作正常:
poly_path = Path(poly_points)
目前我还有我希望测试的点存储为另一个 n
*2 numpy数组(catalog_points)。
也许我的问题出在这里?就像我跑步时一样:
in_poly = poly_path.contains_points(catalog_points)
我得到一个 ndarray
包含 False
对于每个值,无论我使用的点集如何(我已经在多边形内的点数组上测试了这个)。
原文由 BJH 发布,翻译遵循 CC BY-SA 4.0 许可协议
通常在这些情况下,我发现来源很有启发性……
我们可以看到
path.contains_point
的源代码接受一个至少有 2 个元素的容器。contains_points
的来源有点难以理解,因为它调用了 C 函数Py_points_in_path
。似乎这个函数接受一个迭代器,它产生长度为 2 的元素:当然,我们也可以使用一个 numpy 点数组:
只是为了检查我们并不总是得到
True
: