1、MATLAB绘图二,数学软件,9.1 三维图形的精细处理 9.2 图像与动画 9.3 低层绘图操作,9.1 三维图形的精细处理,9.1.1 图形的裁剪处理MATLAB定义的NaN常数可以用于表示那些不可使用的数据,利用这种特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。,数学软件,例9.1 裁掉例8.15三维曲面图中z0.25部分。程序如下:x=0:0.1:2*pi;x,y=meshgrid(x);z=sin(y).*cos(x);I,J=find(z0.25);for ii=1:length(I)z(I
2、(ii),J(ii)=NaN;endsurf(x,y,z);,9.1.2 视点处理MATLAB提供了设置视点的函数view。其调用格式为:view(az,el)其中az为方位角,el为仰角,它们均以度为单位。系统缺省的视点定义为方位角-37.5,仰角30。,例9.2 从不同视点绘制多峰函数曲面。程序如下:subplot(2,2,1);mesh(peaks);view(-37.5,30); %指定子图1的视点title(azimuth=-37.5,elevation=30)subplot(2,2,2);mesh(peaks);view(0,90); %指定子图2的视点title(azimuth=
3、0,elevation=90)subplot(2,2,3);mesh(peaks);view(90,0); %指定子图3的视点title(azimuth=90,elevation=0)subplot(2,2,4);mesh(peaks);view(-7,-10); %指定子图4的视点title(azimuth=-7,elevation=-10),9.1.3 色彩处理1. 颜色的向量表示MATLAB除用字符表示颜色外,还可以用含有3个元素的向量表示颜色。2. 色图色图是m3 的数值矩阵,它的每一行是RGB三元组。色图矩阵可以人为地生成,也可以调用MATLAB提供的函数来定义色图矩阵。除plot及
4、其派生函数外,mesh、surf等函数均使用色图着色。图形窗口色图的设置和改变,使用函数:colormap(m)其中m代表色图矩阵。3. 三维表面图形的着色三维表面图实际上就是在网格图的每一个网格片上涂上颜色。surf函数用缺省的着色方式对网格片着色。除此之外,还可以用shading命令来改变着色方式。,例9.3种图形着色方式的效果展示。程序如下:z=peaks(20);colormap(copper);subplot(1,3,1);surf(z);subplot(1,3,2); surf(z);shading flat;subplot(1,3,3);surf(z);shading inter
5、p;,9.1.3 光照处理MATLAB提供了灯光设置的函数,其调用格式为:light(Color,选项1,Style,选项2,Position,选项3)例9.4 光照处理后的多峰函数曲面。程序如下:z=peaks(20);subplot(1,2,1);surf(z);light(Posi,0,20,10);shading interp;hold on;plot3(0,20,10,p);text(0,20,10, light);subplot(1,2,2);surf(z);light(Posi,20,0,10);shading interp;hold on;plot3(20,0,10,p);te
6、xt(20,0,10, light);,9.2 图像与动画,9.2.1 图像1. imread和imwrite函数imread和imwrite函数分别用于将图像文件读入MATLAB工作空间,以及将图像数据和色图数据一起写入一定格式的图像文件。2. image和imagesc函数这两个函数用于图像显示。为了保证图像的显示效果,一般还应使用colormap函数设置图像色图。,例9.5 在E盘根目录下有一图像文件building.jpg,在图形窗口显示该图像。程序如下:x,cmap=imread(e:building.jpg); %读取图像的数据阵和色图阵image(x);colormap(cmap
7、);axis image off %保持宽高比并取消坐标轴,9.2.2 动画1. getframe函数getframe函数可截取每一幅画面信息而形成一个很大的列向量。该向量可保存到一个变量中。显然,保存n幅图就需一个大矩阵。2. moviein函数moviein(n)函数用来建立一个足够大的n列矩阵。该矩阵用来保存n幅画面的数据,以备播放。3. movie函数 movie(m,n)函数以每秒n幅图形的速度播放由矩阵m的列向量所组成的画面。,例9.6 播放一个直径不断变化的球体。程序如下x,y,z=sphere(50);m=moviein(30); %建立一个30列大矩阵for i=1:30su
8、rf(i*x,i*y,i*z) %绘制球面m(:,i)=getframe; %将球面保存到m矩阵endmovie(m,10); %以每秒10幅的速度播放球面,9.3 低层绘图操作,9.3.1 图形对象及其句柄1. 图形对象MATLAB把构成图形的各个基本要素称为图形对象。这些对象包括计算机屏幕、图形窗口(Figure)、坐标轴(Axes)、用户菜单(Uimenu)、用户控件(Uicontrol)、曲线(Line)、曲面(Surface)、文字(Text)、图像(image)、光源(Light)、区域块(Patch)和方框(Rectangle)。系统将每一个对象按树型结构组织起来。每个图形对象都
9、可以被独立地操作。,2. 图形对象句柄MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。句柄是图形对象的唯一标识符。MATLAB提供了3个用于获取已有图形对象句柄的函数:gcf 获取当前图形窗口的句柄(get current figure)。gca 获取当前坐标轴的句柄(get current axis)。gco 获取最近被单击的图形对象的句柄(get current object)。,9.3.2 图形对象属性1. 属性名与属性值MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值成为属性值。例如,LineStyle是曲
10、线对象的一个属性名,它的值决定着线型,取值可以是- 、:、-.、-或none。2. 属性的操作set函数的调用格式为:set(句柄,属性名1,属性值1,属性名2,属性值2,)get函数的调用格式为:V=get(句柄,属性名),9.3.3 图形对象的创建1. 图形窗口对象建立图形窗口对象使用figure函数。调用该函数的命令形式为:句柄变量=figure(属性名1,属性值1,属性名2,属性值2,)MATLAB为每个图形窗口提供了很多属性。这些属性及其取值控制着图形窗口对象。除公共属性外,其他常用属性:MenuBar属性、Name属性、Position属性、Color属性等。,例9.7 建立一个图
11、形窗口。该图形窗口没有菜单条,标题名称为“图形窗口示例”,起始于屏幕左下角、宽度和高度分别为300像素点和150像素点,背景颜色为绿色,且当用户从键盘按下任意一个键时,将显示“Hello,Keyboard Key Pressed.”字样。命令如下:hf=figure(Color,0,1,0,Position,1,1,300,150,.Name,图形窗口示例,NumberTitle,off,MenuBar,none,.KeyPressFcn,disp(Hello,Keyboard Key Pressed.);,例9.8 分别在4个不同的图形窗口绘制出正弦、余弦、正切、余切曲线。要求先建立一个图形
12、窗口并绘图,然后每关闭一个再建立下一个,直到建立第4个窗口并绘图。 程序如下:x=linspace(0,2*pi,60);y=sin(x);z=cos(x);t=tan(x);ct=1./(t+eps);%命令组待用C4=figure(Name,cotangent(x),NumberTitle,.off);plot(x,ct);axis(0,2*pi,-40,40);C3=figure(Name,tangent(x),DeleteFcn,C4,.NumberTitle,off);plot(x,t);axis(0,2*pi,-40,40);C2=figure(Name,cos(x),Delete
13、Fcn,C3,.NumberTitle,off);plot(x,z);axis(0,2*pi,-1,1);%先创建1个图形窗口并绘制曲线figure(Name,sin(x),DeleteFcn,C2,NumberTitle,off);plot(x,y);axis(0,2*pi,-1,1);,2. 坐标轴对象 建立坐标轴对象使用axes函数,调用它的命令形式为:句柄变量=axes(属性名1,属性值1,属性名2,属性值2,) MATLAB为每个坐标轴对象提供了很多属性。除公共属性外,还有其他常用属性。,例9.9 利用坐标轴对象实现图形窗口的任意分割。程序如下:clf; %清图形窗口x=linspa
14、ce(0,2*pi,20);y=sin(x); axes(Posi,0.2,0.2,0.2,0.7);plot(y,x);title(sin(x)-1); axes(Posi,0.4,0.5,0.2,0.1);stairs(x,y);title(sin(x)-2); axes(Posi,0.55,0.6,0.25,0.3);stem(x,y);title(sin(x)-3); axes(Posi,0.55,0.2,0.25,0.3);stem(x,y);title(sin(x)-4);,3. 曲线对象建立曲线对象使用line函数,调用它的命令形式为:句柄变量=line(x,y,z,属性名1,属
15、性值1,属性名2,属性值2,)其中对x,y,z的解释与高层曲线函数plot和plot3等一样,其余的解释与前面介绍过的figure和axes函数类似。 每个曲线对象也具有很多属性。除公共属性外,还有其他常用属性。,4. 文字对象使用text函数可以根据指定位置和属性值添加文字说明,并保存句柄。调用该函数的命令形式为:句柄变量=text(x,y,z,说明文字,属性名1,属性值1,属性名2,属性值2,)其中说明文字中除使用标准的ASCII字符外,还可使用LATEX格式的控制字符。除公共属性外,文字对象还有其他常用属性。,例9.10 利用曲线对象完成例4.5。程序如下:x=(0:pi/100:2*p
16、i); y1=2*exp(-0.5*x)*1,-1; y2=2*exp(-0.5*x).*sin(2*pi*x); x1=(0:12)/2; y3=2*exp(-0.5*x1).*sin(2*pi*x1); line(x,y1,LineStyle,:,color,g); line(x,y2,LineStyle,-,color,b); line(x1,y3,LineStyle,none,Marker,p,color,r); title(曲线及其包络线);xlabel(independent variable X);ylabel(independent variable Y); text(2.8,
17、0.55,2e-0.5x,FontSize,12); text(0.45,0.55,y=2e-0.5xsin(2pix),FontSize,12); text(1.4,0.1,离散数据点); legend(包络线,包络线,曲线y,离散数据点),5. 曲面对象建立曲面对象使用surface函数,调用它的命令形式为:句柄变量=surface(x,y,z,属性名1,属性值1,属性名2,属性值2,)其中对x,y,z的解释与高层曲面函数mesh和surf等一样,其余的解释与前面介绍过的figure和axes等函数类似。每个曲面对象也具有很多属性。除公共属性外,还有其他常用属性。,例9.11利用曲面对象绘制三维曲面z=sin(y)cos(x)。 程序如下:x=0:0.1:2*pi;x,y=meshgrid(x);z=sin(y).*cos(x); axes(view,-37.5,30); hs=surface(x,y,z,FaceColor,w,EdgeColor,flat);grid on;xlabel(x-axis),ylabel(y-axis),zlabel(z-axis);title(mesh-surf); pause; set(hs,FaceColor,flat);,