【问题标题】:Interpolate Triangular Grid插入三角网格
【发布时间】:2017-01-01 11:44:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: matlab interpolation


    【解决方案1】:

    给定由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)].';
    

    根据det(m)=0计算z。**

        z = (...
                -xi*det(m(:,2:end)) + ...
                yi*det([m(:,1) m(:,3:end)]) +...
                det(m(:,1:end-1))...
            )...
            / det([m(:,1:2) m(:,end)]);
    

    *这里使用的 Octave 函数 tsearch 在较新版本的 MATLAB 中已被弃用。您可以使用 pointLocation 代替它。

    **[4 ,4]矩阵行列式的计算公式可以在Wikipedia中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多