我在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)。
出了什么问题?
答案 0 :(得分:1)
让X
包含节点的x坐标,Y
y坐标,Z
节点的z坐标。将值/数据存储在V
的节点上。现在,您可以通过在Xs
,Ys
和Zs
中保存这些点的x,y和z坐标来指定要插入数据的位置。您在这些点上的数据值是:
Vs = interp3(X,Y,Z,V,Xs,Ys,Zs,'linear');
您可以查看Matlab documentation。
编辑:在您添加代码时:错误似乎是V
的维度错误。如果你看一下Matlab Docu的例子 - > interp3 - >在X,Y和Z域之外进行评估,您会看到,V
必须将维度X
,Y
和Z
组合在一起。来自文档size(V) = [length(Y) length(X) length(Z)]
适用于向量X
,Y
和Z
。
以下是一个例子:
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);