MATLAB surfl()函数的用法(附带实例)
MATLAB 中的 surfl() 函数用来绘制一个带光照模式的三维曲面图,该函数显示一个带阴影的曲面,结合了周围的、散射的和镜面反射的光照模式。想获得较平滑的颜色过渡,则需要使用有线性强度变化的色图(如 gray、copper、bone、pink 等)。
surfl() 函数的调用格式及说明如下表所示:
对于这个函数的调用格式还需要说明的一点是,参数 X,Y,Z 确定的点定义了参数曲面的“里面”和“外面”,若用户想曲面的“里面”有光照模式,只要使用 surfl(X,Y,Z) 即可。
【实例 1】绘出山峰函数在有光照情况下的三维图形。MATLAB 程序如下:

图 1 光照控制图比较
surfl() 函数的调用格式及说明如下表所示:
调用格式 | 说明 |
---|---|
surfl(Z) | 以向量 Z 的元素生成一个三维的、带阴影的曲面,其中阴影模式中的默认光源方位为从当前视角开始,逆时针转 45° |
surfl(X,Y,Z) | 以矩阵 X,Y,Z 生成的一个三维的、带阴影的曲面,其中阴影模式中的默认光源方位为从当前视角开始,逆时针转 45° |
surfl(...,'light') | 用一个 matlab 光照对象(light object)生成一个带颜色、带光照的曲面,这与用默认光照模式产生的效果不同 |
surfl(...,s) | 指定光源与曲面之间的方位 s,其中 s 为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz],默认光源方位为从当前视角开始,逆时针转 45° |
surfl(X,Y,Z,s,k) | 指定反射常系数 k,其中 k 为一个定义环境光(ambient light)系数(0≤ka≤1)、漫反射(diffuse reflection)系数(0≤kb≤1)、镜面反射(specular reflection)系数(0≤ks≤1)与镜面反射亮度 Shine(以像素为单位)组成的四维向量[kd,ks,shine],默认值为 k=[0.55 0.6 0.4 10] |
surfl(ax,...) | 在 ax 指定的坐标区中绘制图形 |
h = surfl(...) | 返回一个曲面图形句柄向量 h |
对于这个函数的调用格式还需要说明的一点是,参数 X,Y,Z 确定的点定义了参数曲面的“里面”和“外面”,若用户想曲面的“里面”有光照模式,只要使用 surfl(X,Y,Z) 即可。
【实例 1】绘出山峰函数在有光照情况下的三维图形。MATLAB 程序如下:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> [x,y,z] = sphere; % 返回 20×20球面的坐标 >> subplot(1,2,1) % 将视图划分为1行2列两个图窗,激活第1个图窗 >> surfl(x+3,y-2,z) % 绘制外面带光照模式的、以(3,-2,0)为中心的球面 >> title('外面有光照') % 添加标题 >> axis equal % 沿每个坐标轴使用相同的数据单位长度 >> subplot(1,2,2) % 激活第2个图窗 >> surfl(x',y',z') % 创建里面带光照模式的、以(3,-2,0)为中心的球面 >> title('里面有光照') % 添加标题 >> axis equal % 沿每个坐标轴使用相同的数据单位长度运行结果为:

图 1 光照控制图比较