我有一组数据,其值在某些x,y,z坐标处。 但是,坐标不是均匀间隔的。 我想插入数据并有一个3D插值图 其中颜色是每个x,y,z坐标处的插值(不是z的值)。
另外我应该提到我的数据被限制在空间中,我只想在接近的点之间进行插值。我有多个片状结构,我不希望在工作表之间插值。因此我想在点标准之间需要一段距离。
我的问题可以在这个MATLAB测试程序中看到
x = rand(100,1)*16 - 8;
y = rand(100,1)*16 - 8;
z = rand(100,1)*16 - 8;
d = rand(100,1)*16 - 8;
散点图非常有效
scatter3(x,y,z,5,d);
colormap(jet);
colorbar;
我希望有一个漂亮的表面颜色。 当然,上面的插值将非常糟糕,因为它是 随机点和颜色(值),但对于我的情况,它有更多的意义。
关于如何实现这一目标的任何想法?
修改
我将强调我的问题的本地化性质(使用scatter3参见下图)。
Suever在与第一张图相同的数据上使用scatInterpolant提出的非常有趣的解决方案给出了以下图片
谢谢,
塞缪尔
答案 0 :(得分:1)
由于输入数据分散,您将需要使用scatteredInterpolant
。这允许插入非均匀间隔的输入数据。
对于您的特定数据,您将使用类似于以下内容的内容,其中xq
,yq
和zq
是您要插入输入的点。
S = scatteredInterpolant(x,y,z,d);
values = S(xq,yq,zq);
就您对相邻数据定义的具体情况而言,您需要查看为scatteredInterpolant
提供的各种interp methods,看看它们是否满足您的需求。
修改强>
仔细阅读后,您似乎可能希望在常规网格上插入 z
和d
。如果是这种情况,您仍然可以通过以下方式使用scatteredInterpolant
。
% First interpolate for z
S = scatteredInterpolant(x,y,z);
xrange = linspace(min(x), max(x), 1000);
yrange = linspace(min(y), max(y), 1000);
[xq, yq] = meshgrid(xrange, yrange);
% These are now the interpolated z values (height of surface)
znew = S(xq,yq);
% Now we want to use x,y,z to interpolate d at the new grid points
S = scatteredInterpolant(x,y,z,d);
% Interpolate d at the new points
dnew = S(xq, yq, znew);
因此,我们将此应用于您提供的随机数据,我们可以像您所说的那样绘制表面。
S = surf(xq, yq, znew, 'CData', dnew);
原始数据点(x,y,z)显示为带有黑色轮廓的散点图。您可以看到数据会插入这些点,并且也从这些点插入表面的颜色。