用散乱数据的matlab进行4D插值绘图

时间:2016-03-08 17:55:10

标签: matlab plot 3d interpolation 4d

我有一组数据,其值在某些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参见下图)。

Localized interpolation problem.

Suever在与第一张图相同的数据上使用scatInterpolant提出的非常有趣的解决方案给出了以下图片

Interpolated picture

谢谢,

塞缪尔

1 个答案:

答案 0 :(得分:1)

由于输入数据分散,您将需要使用scatteredInterpolant。这允许插入非均匀间隔的输入数据。

对于您的特定数据,您将使用类似于以下内容的内容,其中xqyqzq是您要插入输入的点。

S = scatteredInterpolant(x,y,z,d);
values = S(xq,yq,zq);

就您对相邻数据定义的具体情况而言,您需要查看为scatteredInterpolant提供的各种interp methods,看看它们是否满足您的需求。

修改

仔细阅读后,您似乎可能希望在常规网格上插入 zd。如果是这种情况,您仍然可以通过以下方式使用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);

enter image description here

原始数据点(x,y,z)显示为带有黑色轮廓的散点图。您可以看到数据会插入这些点,并且从这些点插入表面的颜色。