2017-01-01 233 views
2

我有一个三角形网格,用于trimesh,其中z -coordinate是x,y的(平滑)函数。三角测量是由一些索引矩阵t给定,所以可以显示由网格给出这个分段线性逼近作为插值三角形网格

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

现在,我想在一些普通x0,y0评估网格点之间即本apprixmation。我知道griddata,但此功能创建一个新的三角测量。我想使用给定的三角测量t

回答

1

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

鉴于delaunay创造了一个三角:

tri = delaunay (X, Y); 

和点的坐标进行插值为xi, yi

使用tsearchpointLocation以找到三角形包含该点:

idx = tsearch (X, Y, tri, xi, yi); 

三角形

pts= tri(idx, :); 

创建可叫做equation of a plane(三角形)中给出其3点的矩阵的顶点的提取索引

m=[X(pts);Y(pts);Z(pts);ones(1,3)].'; 

根据det(m)=0计算z。式用于计算[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)]); 
可以找到