小编Sir*_*eel的帖子

检查一个点是否在 ConvexHull 中?

我无法理解如何计算 n 维点是否在 n 维凸包内。

这里提出了一个非常相似的问题(相同): What's a effective way to find a point if a point located in a point cloud?

然而,答案让我感到困惑,或者似乎对我不起作用,我不知道为什么。

def in_hull(p, hull):
    """ Copied and from the Top Original answer """
    from scipy.spatial import Delaunay
    if not isinstance(hull,Delaunay):
        hull = Delaunay(hull)

    return hull.find_simplex(p)>=0
Run Code Online (Sandbox Code Playgroud)

这个函数给我带来了很多错误或不需要的结果,而我正在使用它。然而,在调试时,我编写了一个简单的脚本来测试一些明显的期望:

如果我用一组点构造一个 ConvexHull,当我检查该组点的“成员资格”时,它们都应该是“成员”。

results_all = []
for _ in range(5000):
    cloud = np.random.rand(5000, 2)
    result = in_hull(cloud, cloud)
    results_all.append(np.all(result))

arr = np.array(results_all)
print(np.sum(np.logical_not(arr)))
Run Code Online (Sandbox Code Playgroud)

虽然这种情况很少见,但对于随机生成的数据(5000 个中的 3 个),这似乎会失败,但在实际数据上问题更大。我所说的失败的意思是,我实际上遇到了一些情况,并非所有点都被视为成员。

我做错了什么吗?或者也许完全是误解?我现在很困惑,所以希望能解释一下正在发生的事情。

最后,我想要;给定一个 ConvexHull,在前一阶段计算;能够确定点是否位于船体内。

python numpy scipy

3
推荐指数
1
解决办法
2790
查看次数

标签 统计

numpy ×1

python ×1

scipy ×1