在scipy.spatial.Delaunay中,find_simplex方法返回什么?

问题描述

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

但是当我测试它时,返回的数组有点令人困惑。例如,如果我创建两个相同的数组,请使用其中一个创建一个外壳,然后测试第二个点是否在该外壳中,我得到以下信息:

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

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

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

我了解到1是点在外壳内部,-1是点在外部,但是0是多少?它位于船体边界上吗?但是,为什么只有两点呢?应该是所有人。

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

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

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

前两个点具有相同的索引,第三个点按计划具有 -1 ,但由于某种原因,尽管外壳和该点都完全相同,但第四个点已更改为0一样。

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

解决方法

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

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

我的解释是Delaunay(pts_outer)two triangles分别用索引0和1来三角化矩形。然后hull.find_simplex(pts_inner)退回[0,1,1]意味着您的前两个点在三角形0中,第二个点在三角形1中。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...