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

我需要找出我的一些点是在凸包内部还是外部,我正在使用这个答案:(在此处输入链接描述)。

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

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)

该方法的文档只说它返回:“包含每个点的单纯形的索引。三角剖分之外的点得到值 -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,即使船体和点完全相同。


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


四季花海
浏览 167回答 1
1回答

鸿蒙传说

它返回包含该点的三角形的索引。如果有多个三角形包含相同的索引,它并不总是选择相同的索引。我认为您误解了“它返回:包含每个点的单纯形的索引。三角剖分之外的点的值为-1。”我的解释是用两个Delaunay(pts_outer)三角形对矩形进行三角剖分,两个三角形的索引分别为 0 和 1。然后hull.find_simplex(pts_inner)重新调整[0, 0, 1, 1]意味着前两个点位于三角形 0 中,后两个点位于三角形 1 中。最后,有点奇怪的是,find_simplex现在告诉您您的点[5, 5]位于三角形 1 中。但这并不是不正确,因为该点[5, 5]位于两个三角形中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python