此图由Mathematica
以下内容创建:
ls = Table[Sinc[x*y], {x, -5, 5, 0.2}, {y, -5, 5, 0.2}];
ListPlot3D[ls, InterpolationOrder -> 2, PlotRange -> All,
Mesh -> None]
Run Code Online (Sandbox Code Playgroud)
如何在MatLab中创建这样的情节?
到目前为止,这是我的尝试:
>> x=linspace(-5.,5.,51);
>> y=linspace(-5.,5.,51);
>> [x,y]=meshgrid(x,y);
>> z=sinc(x.*y);
>> surf(x,y,z)
>> shading interp
Run Code Online (Sandbox Code Playgroud)
它看起来非常不同,尤其是涟漪的细节.是否可以制作像Mathematica一样的情节,特别是光滑度,阴影?
hoo*_*one 14
为了创建漂亮的光照和阴影,您需要为绘图添加光源,并添加某种面部光照.如果分辨率太低,那么你将得到一个有点粗糙的图,因为'interp'样式着色使用线性插值.例如
n = 51;
x=linspace(-5., 5., n);
y=linspace(-5., 5., n);
[x, y]=meshgrid(x, y);
sinc = @(x) sin(x)./x;
z=sinc(x.*y);
z(isnan(z)) = 1;
surf(x, y, z, 'LineStyle', 'none', 'FaceColor', 'interp')
colormap(cool)
camlight right
set(gca, 'CameraPosition', [45 35 9.8])
Run Code Online (Sandbox Code Playgroud)
产生以下内容
请注意,曲面的平滑程度与之相关n
.较大的值n
将增加表面的光滑度.
如果您生成的数据创建起来很昂贵,则可以使用比线性更高级的插值形式来提高分辨率,如下所示
n = 51;
x=linspace(-5., 5., n);
y=linspace(-5., 5., n);
[x, y]=meshgrid(x, y);
sinc = @(x) sin(x)./x;
z=sinc(x.*y);
z(isnan(z)) = 1;
nn = 401;
xi = linspace(-5.0, 5.0, nn);
yi = xi;
[xi, yi] = meshgrid(xi, yi);
zi = interp2(x, y, z, xi, yi, 'spline');
surf(xi, yi, zi, 'LineStyle', 'none', 'FaceColor', 'interp')
colormap(cool)
camlight right
set(gca, 'CameraPosition', [45 35 9.8])
Run Code Online (Sandbox Code Playgroud)
产生以下图像
有关详细信息,请参阅以下帮助页面