在 scipy.spatial.Delaunay 中,find_simplex() 方法 return 是什么?

In scipy.spatial.Delaunay what does find_simplex() method return?

我需要确定我的一些点是在凸包内部还是外部,我使用的是这个答案:(enter link description here).

但是当我测试它时,返回的数组有点混乱。例如,如果我创建两个相同的数组,使用一个创建一个船体,然后测试第二个点是否在该船体中,我得到以下结果:

from scipy.spatial import Delaunay
pts_outer = np.array([[0, 0], [0, 5], [5, 0], [5, 5]])
pts_inner = pts_outer
hull = Delaunay(pts_outer)
hull.find_simplex(pts_inner)

Out[29]: array([0, 0, 1, 1], dtype=int32)

该方法的文档仅说明它 returns:“包含每个点的单纯形索引。三角剖分之外的点的值为 -1”

我明白1是船体内的点,-1是船外的点,但是0是什么?它是位于船体边界上的点吗?可是后来为什么只去了两点呢?应该都是。

如果我稍微修改一下测试数组:

pts_inner = np.array([[0, 0], [0, 5], [5, -1], [5, 5]])
hull.find_simplex(pts_inner)

Out[31]: array([ 0,  0, -1,  0], dtype=int32)

前两个点的索引相同,第三个点按计划得到 -1,但第四个点由于某种原因已更改为 0,即使两个船体和点完全一样

有人知道如何解释这些结果吗?

tl;dr:它 returns 包含该点的 a 三角形的索引。如果有多个包含它的三角形,它并不总是选择相同的索引。

我认为您误解了“它 returns:Indices 包含每个点的单纯形。三角剖分之外的点的值为 -1。”

我的解释是 Delaunay(pts_outer) 用 two triangles 分别用索引 0 和 1 对矩形进行三角剖分。然后 hull.find_simplex(pts_inner) 重新计算 [0, 0, 1, 1] 意味着你的前两个点在三角形 0 中,第二个点在三角形 1 中。

最后有点奇怪的是 find_simplex 现在告诉你你的点 [5, 5] 在三角形 1 中。但这是不正确的,因为点 [5, 5] 在两个三角形中。