通常需要确定N维空间中的特定点是否在该N维空间的一组点的Delaunay镶嵌内,如果是,则哪个N单纯形包含该点,以及镶嵌中的哪个点最接近所需点。函数tsearch
和dsearch
在三角函数中执行此函数,以及tsearchn
和dsearchn
在N维镶嵌中。
识别是否从向量表示的特定点p落在N-单纯形的一个单纯形内,我们可以把点的笛卡尔坐标写成关于N-单纯形的参数形式。这种参数形式称为点的重心坐标。如果定义N-单纯形的点从给定N+1个向量t(i,:)
,则定义该点的重心坐标p从给定
p = beta * t
这里的beta包含N+1个值,这些值一起作为向量表示点的重心坐标p。确保的值具有唯一的解决方案beta的附加标准
sum (beta) == 1
是强加的,因此我们可以将上述内容写成
p - t(end, :) = beta(1:end-1) * (t(1:end-1, :) - ones (N, 1) * t(end, :)
正在解决beta然后我们可以写
beta(1:end-1) = (p - t(end, :)) / (t(1:end-1, :) - ones (N, 1) * t(end, :)) beta(end) = sum (beta(1:end-1))
它给出了点的笛卡尔坐标的转换公式p到重心坐标beta.重心坐标的一个重要性质是,对于N单纯形中的所有点
0 <= beta(i) <= 1
因此,中的测试tsearch
和tsearchn
本质上需要用N-单纯形的每个单纯形的重心坐标来表示每个点,并测试的值beta。这正是中使用的实现tsearchn
. tsearch
针对二维进行了优化,并且没有明确形成重心坐标。
idx =
tsearchn (x, t, xi)
¶[idx, p] =
tsearchn (x, t, xi)
¶找到包围给定点的单纯形。
tsearchn
通常与一起使用delaunayn
:t = delaunayn (x)
返回一组simplext
然后tsearchn
返回的行索引t包含的每个点xi对于凸包外部的点,idx是NaN。
如果被指定,tsearchn
还返回重心坐标p封闭单纯形的。
的使用示例tsearch
可以用简单的三角函数法看到
x = [-1; -1; 1; 1]; y = [-1; 1; -1; 1]; tri = [1, 2, 3; 2, 3, 4];
从两个三角形组成,定义为tri.然后我们可以确定一个点落在哪个三角形里
tsearch (x, y, tri, -0.5, -0.5) ⇒ 1 tsearch (x, y, tri, 0.5, 0.5) ⇒ 2
我们可以确认一个点不在其中一个三角形内,就像
tsearch (x, y, tri, 2, 2) ⇒ NaN
这个dsearch
和dsearchn
在测试中找到离所需点最近的点。所需的点不一定必须在镶嵌中,即使它是镶嵌的返回点,也不一定是在其中找到所需点的N单纯形的顶点之一。
idx =
dsearch (x, y, tri, xi, yi)
¶idx =
dsearch (x, y, tri, xi, yi, s)
¶返回索引idx的最近点x, y
到元素[xi(:), yi(:)]
.
变量s出于兼容性考虑被接受,但被忽略。
idx =
dsearchn (x, tri, xi)
¶idx =
dsearchn (x, tri, xi, outval)
¶idx =
dsearchn (x, xi)
¶[idx, d] =
dsearchn (…)
¶返回索引idx的最近点x到元素xi.
如果outval则的值xi不包含在一个单纯形中tri设置为outval通常地tri从返回delaunayn (x)
.
可选输出d包含查询点之间距离的列向量xi和最近的单纯形点x.
的使用示例dsearch
,使用上述值x, y和tri是
dsearch (x, y, tri, -2, -2) ⇒ 1
如果希望符号镶嵌之外的点,则dsearchn
可以用作
dsearchn ([x, y], tri, [-2, -2], NaN) ⇒ NaN dsearchn ([x, y], tri, [-0.5, -0.5], NaN) ⇒ 1
其中镶嵌之外的点然后符号为NaN
.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2