gpt4 book ai didi

python - inpolygon - matplotlib.path.Path contains_points() 方法的示例?

转载 作者:太空狗 更新时间:2023-10-29 19:32:07 25 4
gpt4 key购买 nike

我一直在寻找 MATLAB 的 inpolygon() 的 python 替代品,我发现 contains_points 是一个不错的选择。

但是,文档有点空洞,没有说明 contains_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*2 numpy 数组(其中 n 非常大,约为 500)。据我所知,我需要对该数据调用 Path() 方法,这似乎工作正常:

poly_path = Path(poly_points)

目前,我还希望将要测试的点存储为另一个 n*2 numpy 数组 (catalog_points)。

也许我的问题出在这里?就像我运行时一样:

in_poly = poly_path.contains_points(catalog_points)

无论我使用的点集是什么,我都会返回一个包含每个值的 ndarrayFalse(我已经在多边形内的点数组上对此进行了测试)。

最佳答案

通常在这些情况下,我发现来源很有启发性......

我们可以看到 path.contains_point 的来源接受一个至少有 2 个元素的容器。 contains_points 的源代码有点难以理解,因为它调用了一个 C 函数 Py_points_in_path。 .似乎这个函数接受一个迭代器,它产生长度为 2 的元素:

>>> from matplotlib import path
>>> p = path.Path([(0,0), (0, 1), (1, 1), (1, 0)]) # square with legs length 1 and bottom left corner at the origin
>>> p.contains_points([(.5, .5)])
array([ True], dtype=bool)

当然,我们也可以使用点的 numpy 数组:

>>> points = np.array([.5, .5]).reshape(1, 2)
>>> points
array([[ 0.5, 0.5]])
>>> p.contains_points(points)
array([ True], dtype=bool)

只是为了检查我们并不总是得到 True:

>>> points = np.array([.5, .5, 1, 1.5]).reshape(2, 2)
>>> points
array([[ 0.5, 0.5],
[ 1. , 1.5]])
>>> p.contains_points(points)
array([ True, False], dtype=bool)

关于python - inpolygon - matplotlib.path.Path contains_points() 方法的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com