插值三角网格

时间:2017-01-01 11:44:33

标签: matlab interpolation

我在trimesh中使用了一个三角形网格,其中z - 坐标是x,y的(平滑)函数。三角测量由一些索引矩阵t给出,因此我可以显示网格给出的分段线性近似值

 trimesh(t,x,y,f(x,y))

现在我想评估网格点之间的这种apprixmation,即在某些一般x0,y0中。我知道griddata,但是这个函数创建了一个新的三角测量。我想使用给定的三角测量t

1 个答案:

答案 0 :(得分:1)

这里使用Octave函数tsearch解释基于三角剖分的线性插值,在新版本的MATLAB中不推荐使用。相反,您可以使用pointLocation

鉴于delaunay创建的三角测量:

tri = delaunay (X, Y);

和要插值为xi, yi的点的坐标。

使用tsearchpointLocation查找包含该点的三角形:

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)]);