如何解决在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]
在两个三角形中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。