三角形内部的线性插值

时间:2016-09-27 10:53:24

标签: matlab

我在3D三角形的节点处有数据,我需要进行插值以获取三角形内的数据。

这是我试图做的事情:

  x=[0,1,0];
 y=[1,0,1];
 z=[0,2,-1];
 [X,Y,Z]=meshgrid(x,y,z);
 v=[2,5,-1];
 xs=linspace(0,1,.1);
 ys=linspace(0,1,.1);
 zs=linspace(-1,2,.1);
 Vs = interp3(X,Y,Z,v,xs,ys,zs,'linear');

我收到错误:输入坐标数组的数量不等于这些数组的维数(NDIMS)。

出了什么问题?

1 个答案:

答案 0 :(得分:1)

X包含节点的x坐标,Y y坐标,Z节点的z坐标。将值/数据存储在V的节点上。现在,您可以通过在XsYsZs中保存这些点的x,y和z坐标来指定要插入数据的位置。您在这些点上的数据值是:

Vs = interp3(X,Y,Z,V,Xs,Ys,Zs,'linear');

您可以查看Matlab documentation

编辑:在您添加代码时:错误似乎是V的维度错误。如果你看一下Matlab Docu的例子 - > interp3 - >在X,Y和Z域之外进行评估,您会看到,V必须将维度XYZ组合在一起。来自文档size(V) = [length(Y) length(X) length(Z)]适用于向量XYZ

以下是一个例子:

X = linspace(-1,2,5);
Y = linspace(-1,7,23);
Z = linspace(3,9,23);
V = rand(23,5,23);

xq = linspace(0,1,34);
yq = linspace(0,2,34);
zq = linspace(4,5,34);
vq = interp3(X,Y,Z,V,xq,yq,zq,'linear',-1);