两者的区别在于颜色%
%mesh(X,Y,Z)
%surf(X,Y,Z)
mesh()创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色。
surf()绘制的曲面被分成一块一块的,每一块的颜色依靠对应的z数值决定。是一个具有实色边和实色面的三维曲面。
用一段代码绘制一个三维曲面图:
close all
[X,Y] = meshgrid(-8:0.5:8);
R = sqrt(X.^2+Y.^2)+eps;
Z = sin(R)./R;
mesh(X,Y,Z,'EdgeColor','black')
结果如下:
可以看出,我们图中每一块的颜色都是白色的,边缘由于我们的设置变成了黑色
这和绘图函数使用的颜色映射表有关(colormap)
关于颜色映射表在本专栏二维绘图有讲解。
这里如果我们不设置边缘为黑色:
mesh(X,Y,Z)
结果:
可以看出图形边缘自然变成彩色,根据z值的不同变成不同的颜色。
如果使用surf()函数绘图:
surf(X,Y,Z)
colormap hsv
colorbar
结果:
使用黑色的边缘勾勒,并在每一块填充特定的颜色。
我们设置了colormap的格式,并向图形中添加了color bar来表示具体的数值,让图形更能说明问题。
还可以用以下语句对图形进行一定的修饰
% shading faceted
% shading flat
% shading interp
分别绘制三幅图
figure
subplot(2,2,1)
surf(X,Y,Z)
title('init')
subplot(2,2,2)
surf(X,Y,Z)
shading faceted
title('shading faceted')
subplot(2,2,3)
surf(X,Y,Z)
shading flat
title('shading flat')
subplot(2,2,4)
surf(X,Y,Z)
shading interp
title('shading interp')
结果:
从对比中可以明显看出:
shading faceted就是缺省的绘制方式,也就是默认的网格设置
shading flat会使曲面看上去更平滑,去除黑色的网格线
shading interp会使曲面颜色变化更自然,不再是突变
来源《高等光学仿真——光波导、激光》