我在trimesh
中使用了一个三角形网格,其中z
- 坐标是x,y
的(平滑)函数。三角测量由一些索引矩阵t
给出,因此我可以显示网格给出的分段线性近似值
trimesh(t,x,y,f(x,y))
现在我想评估网格点之间的这种apprixmation,即在某些一般x0,y0
中。我知道griddata
,但是这个函数创建了一个新的三角测量。我想使用给定的三角测量t
。
答案 0 :(得分:1)
这里使用Octave函数tsearch
解释基于三角剖分的线性插值,在新版本的MATLAB中不推荐使用。相反,您可以使用pointLocation
鉴于delaunay
创建的三角测量:
tri = delaunay (X, Y);
和要插值为xi, yi
的点的坐标。
使用tsearch
或pointLocation
查找包含该点的三角形:
idx = tsearch (X, Y, tri, xi, yi);
提取三角形顶点的索引
pts= tri(idx, :);
创建一个矩阵,在给出3分
的情况下重复equation of a plane(三角形)m=[X(pts);Y(pts);Z(pts);ones(1,3)].';
根据z
计算det(m)=0
。计算[4 ,4]
矩阵的行列式的公式可以在Wikipedia
z = (...
-xi*det(m(:,2:end)) + ...
yi*det([m(:,1) m(:,3:end)]) +...
det(m(:,1:end-1))...
)...
/ det([m(:,1:2) m(:,end)]);