MATLAB三维图形绘制.ppt
4.2 MATLAB的 三维图形绘制,一、绘制三维线图命令plot3,plot3是用来绘制三维曲线的,它的使用格式与二维绘图的plot命令很相似。,语法:plot3(x,y,z,s)%绘制三维曲线 plot3(x1,y1,z1,s1,x2,y2,z2,s2,)%绘制多条三维曲线说明:当x、y、z是同维向量时,则绘制以x、y、z元素为坐标的三维曲线;当x、y、z是同维矩阵时,则绘制三维曲线的条数等于矩阵的列数。s是指定线型、色彩、数据点形的字符串。,二、绘制三维网格图和曲面图,1.meshgrid命令,为了绘制三维立体图形,MATLAB的方法是将x方向划分为m份,将y方向划分为n份,meshgrid命令是以x、y向量为基准,产生在x-y平面的各栅格点坐标值的矩阵。,语法:X,Ymeshgrid(x,y)说明:X、Y是栅格点的坐标,为矩阵;x、y为向量。,例如,将x(1m)向量和y(1n)向量转换为(nm)的矩阵:,2.三维网格图,三维网格图是由一些四边形相互连接在一起所构成的一种曲面。,语法:mesh(z)%画三维网线图mesh(x,y,z,c)说明:当只有参数z时,以z矩阵的行下标作为x坐标轴,把z的列下标当作y坐标轴;x、y分别为x、y坐标轴的自变量;当有x、y、z参数时,c是指定各点的用色矩阵,当c省略时默认用色矩阵是z的数据。如果x、y、z、c四个参数都有,则应该都是维数相同的矩阵。,3.三维曲面图,语法:surf(z)%画三维曲面图surf(x,y,z,c)说明:参数设置与mesh命令相同,c也可以省略。,4.其它立体网线图和曲面图,meshc命令为立体网状图加等高线;meshz为立体网状图加“围裙”。,三、绘制三维旋转体,1、球面图,语法:sphere(n)%产生单位球面,n为旋转圆周上的分 格线条数,默认n=20。x,y,z=sphere(n)%生成三个(n+1)*(n+1)阶的矩阵 利用surf或mesh命令产生单位球面。,2、柱面图,语法:cylinder(r,n)%以母线向量r生成单位柱面,默认n=20,r=1,1。x,y,z=cylinder(r,n)%生成柱面的x,y,z数据矩阵,利用surf或mesh命令产生单位高度柱面。,四、立体图形与图轴的控制,1网格的隐藏,语法:hidden off%显示被遮盖的网格hidden on%隐藏被遮盖的网格,2改变视角,语法:view(az,el)%通过方位角和俯仰角改变视角说明:az表示方位角(azimuth),el表示俯仰角(elevation),默认值:az=-37.5,el=30,五、色彩的控制,1色图(colormap),(1)RGB三元组RGB三元数组每行表示一种色彩,数组元素R、G、B在01之间取值,分别表示红、绿、蓝基色的相对亮度,如下表所示。,colormap(R,G,B)色图设定函数colormap 色图函数 色图设定函数colormap 色图函数(m)产生m3的色图矩阵 缺省643。,2色图的显示和处理,(1)色图的显示 rgbplot命令语法:rgbplot(map)说明:map是表4.8中的各预定义色图函数,rgbplot命令可画出以行数为自变量红、绿、蓝相对亮度分量的直线图,反映R、G、B三色比重的变化。colorbar命令以不同颜色来代表曲面的高度,垂直显示颜色标尺。,(2)浓淡处理shading,【例】使用浓淡处理peaks函数曲面图。,(3)亮度处理brighten,语法:brighten(a),说明:当0=a=1时,色图加亮,当-1=a0时,色图变暗。,4.3 MATLAB的特殊图形绘制,一、条形图,条形图常用于对统计的数据进行作图,特别适用于少量且离散的数据。,语法:bar(x,y)%画条形图bar3(y,z,width,参数)%画三维条形图,【例】用条形图表示某年一月份中3日6日连续四天的温度数据,y矩阵的各列分别表示平均温度、最高温度和最低温度,用条形图和三维条形图分别表示。,x=3:6;y=5.3000 13.0000 0.40005.1000 11.8000-1.70003.7000 8.1000 0.60001.5000 7.7000-4.5000 bar(x,y)%画条形图 bar3(x,y)%画三维条形图,图4.23(a)条形图(b)三维条形图,二、直方图,语法:hist(y,m)%统计每段的元素个数并画出直方图hist(y,x)%x是向量,用于指定所分每个数据段 的中间值,三、饼图,饼图是用于显示向量中的各元素占向量元素总和的百分比。,语法:pie(x,explode,label)%画二维饼图pie3(x,explode,label)%画三维饼图,说明:x是向量;explode是与x同长度的向量,用来决定是否从饼图中分离对应的一部分块,非零元素表示该部分需要分离;label是用来标注饼图的字符串数组。,分段的个数,默认为10,【例4.21】绘制四个季度支出额的饼图。y=200 100 250 400;%四个季度支出额 explode=0 0 1 0;pie(y,explode,第一季度,第二季度,第三季度,第四季度),四、离散数据图,MATLAB提供了多个绘制离散数据的命令,有stem、stem3、stairs和scatter等。,【例】使用几种绘制离散数据的命令来显示 的离散数据。,五、等高线图,语法:contour3(Z,n)%绘制Z矩阵的三维等高线contour(x,y,z,n)%绘制以x和y指定x、y坐标的二维等高线说明:n为等高线的条数,省略时为自动条数。,x=0:0.1:2*pi;y=sin(x).*exp(-2*x);subplot(3,1,1)stem(x,y,filled)%画火柴杆图 subplot(3,1,2)stairs(x,y)%画阶梯图 subplot(3,1,3)scatter(x,y)%画点图,六、对数坐标和极坐标图,1.对数坐标图形,语法:semilogx(x,y,参数)%绘制x为对数坐标的曲线semilogy(x,y,参数)%绘制y为对数坐标的曲线loglog(x,y,参数)%绘制x、y都为对数坐标的曲线,2.极坐标图语法:polar(theta,radius,参数)%绘制极坐标图说明:theta为相角,radius为离原点的距离。,【例4.23】求传递函数为 的对数幅频特性曲线,横坐标为w,按对数坐标。w=logspace(-2,3,20);%频率w为0.01到1000 Aw=1./(w.*sqrt(0.5*w).2+1);%计算幅频 Lw=20*log10(Aw);%计算对数幅频 semilogx(w,Lw)title(对数幅频特性曲线),七、复向量图,pass命令compass绘制的是以原点为起点的一组复向量,因此又称为罗盘图。语法:compass(u,v)%画罗盘图 compass(Z)说明:u、v分别为复向量的实部和虚部;当只有一个参数Z时,则相当于compass(real(Z),imag(Z)。,2.feather命令feather绘制的是起点为(k,0)的复向量图,又称为羽毛图。语法:feather(u,v)%画羽毛图 feather(Z),图4.31(a)罗盘图(b)羽毛图,4.4 对话框,用于计算机与用户进行交互的界面,1.输入信息对话框输入对话框为用户的输入信息提供了界面,使用inputdlg命令创建。语法:answer=inputdlg(prompt,title,lineno,defans,addopts)%创建输入对话框,说明:answer 返回用户的输入,为元胞数组;prompt为提示信息字符串,用引号括起来,为元胞数组;title为标题字符串,用引号括起来,可以省略;lineno用于指定输入值的行数,可以省略;defans为输入项的默认值,用引号括起来,是元胞数组可以省略;addopts指定对话框是否可以改变大小,取on或off,省略时为off表示不能改变大小。,【例】利用输入对话框输入二阶系统的系数。,程序分析:prompt、defans和p都是元胞数组。如果单击“Cancel”按钮,则返回空的元胞数组。,prompt=请输入阻尼系数,请输入无阻尼振荡频率;defans=0.707,1;p=inputdlg(prompt,输入参数,1,defans),2.输出信息对话框(1)消息框语法:msgbox(message,title,icon,icondata,iconcmap,CreateMode)%创建消息框,说明:message为显示的信息,可以是字符串或数组;title为标题,是字符串可省略;icon为显示的图标,可取值为“none”(无图标)、“error”(出错图标)、“help”(帮助图标)、“warn”(警告图标)或“custom”(自定义图标),也可省略;当使用“custom”时,用icondata定义图标的数据,用iconcmap定义图标的颜色映象;CreateMode为对话框的产生模式可省略,取值为“modal”(有模式)、“replace”(无模式可代替同名的对话框)、“non-modal”(默认为无模式)。(有模式对话框是指在对话框关闭之前,用户无法进行其它程序的运行),【上例续】使用消息框显示当阻尼系数大于1时的警告信息,如图所示。,msgbox(阻尼系数输入范围出错,警告,warn),(2)其它对话框,【例续】使用警告对话框显示当阻尼系数大于1时的警告信息。warndlg(阻尼系数输入范围出错,警告),【例续】使用出错提示框显示当阻尼系数小于0时出错信息。errordlg(阻尼系数输入出错,出错),【例续】使用帮助提示框显示阻尼系数的范围。helpdlg(欠阻尼系数应大于0小于1,帮助),(3)提问提示框,【例续】使用提问提示框使用户确认。button=questdlg(是否确认?,Are you sure?,Yes,No,Yes),程序分析:有两个按钮,默认的指定按钮为“Yes”。即当用户按下回车键时,返回“Yes”,当用户单击按钮“No”时,返回“No”。,3.文件管理对话框,(1)打开文件对话框uigetfile,语法:FileName,PathName=uigetfile(FiltrEspec,Title,x,y),说明:FileName和PathName分别为返回的文件名和路径,可省略,如果按“取消”按钮或发生错误,都返回0;FiltrEspec指定初始时显示的文件名,可以用通配符“*”表示,当省略时,则自动列出当前路径下的所有“*.m”文件和目录;Title为对话框标题,可省略;x、y分别指定对话框在屏幕上的位置(到屏幕左上角的距离),单位是像素,可省略。,【例】利用打开文件对话框选择MATLAB目录下的文件license.txt,如图所示。,程序分析:在屏幕的左上角位置显示打开文件对话框,单击“打开”按钮,返回文件名和路径名到fname和pname变量。,fname,pname=uigetfile(*.*,打开文件),(2)保存文件对话框uiputfile,语法:FileName,PathName=uiputfile(FiltrEspec,Title,x,y),【例续】利用保存文件对话框来选择文件。fname1,pname1=uiputfile(Ex0431.mat,保存文件),什么是句柄图形,句柄图形(Handle Graphics):利用底层绘图函数,通过对对象属性的设置与操作实现绘图。句柄图形中所有图形操作都是针对图形对象而言的。句柄图形充分体现了面向对象的程序设计。,4.5 句柄图形,句柄图形的功能句柄图形可以随意改变matlab生成图形的方式。句柄图形允许你定制图形的许多特性,无论是对图形做一点小改动,还是影响所有图形输出的整体改动。句柄图形的特性高层绘图函数是无法实现的,一、句柄图形体系,句柄图形是一种面向对象的绘图系统,又称为低层图形。句柄图形体系由若干个图形对象组成,如图所示。,什么是句柄?句柄是图形对象的标识代码,标识代码含有图形对象的各种必要的属性信息。各图形对象的句柄数据格式:根屏幕 0 图形窗口 整数,表示图形窗口数 其它对象 对应的符点数,句柄(handle)与句柄操作,所有能创建图形对象的matlab函数都可给出所创建图形对象的句柄例:创建1号窗口,返回句柄 h=figure(1)h=1 返回值为窗口号数例:h=line(1:6,1:6)创建线对象的同时也建立了一个唯一的句柄 变量h是句柄值符点数,二、图形对象的操作,1图形对象的创建,每次创建一个对象时,就为它建立一个唯一的句柄。每个命令的格式及功能如表所示。,2对象句柄的获取,(1)当前对象句柄的获取,MATLAB提供了三个获取当前对象句柄的命令:语法:gcf%获取当前图形窗口句柄gca%获取当前坐标轴句柄gco%获取被鼠标最近点击对象的句柄,【例】使用上述命令获取图形对象的句柄。,(2)查找对象,用命令 findobj可以快速查找所有对象,以及获取指定属性值的对象句柄。语法:h=findobj%返回根对象和所有子对象的句柄h=findobj(h_obj)%返回指定对象的句柄h=findobj(PropertyName,PropertyValue)%返回符合指定属性值的对象句柄h=findobj(h_obj,PropertyName,PropertyValue)%在指定对象及子对象中查找符合指定属性 值的对象句柄说明:h_obj为指定对象句柄;PropertyName为属性名;PropertyValue为属性值。,【例】使用findobj命令获取图形对象的句柄。,(3)追溯父对象和子对象的句柄,如果一个对象的句柄已知,则可以追溯到其父对象和子对象的句柄。语法:h_parent=get(h_obj,parent)%追溯父对象的句柄h_children=get(h_obj,children)%追溯子对象的句柄,3对象句柄的删除删除图形对象使用命令delete(h_obj),该命令将删除句柄所指对象和所有子对象,而且不提示确认,使用时要小心。,三、图形对象属性的获取和设置,1创建对象时设置属性,对象的属性可以在创建时设置,在创建时句柄图形对象可以设置多个属性。,【例4.29】创建图形对象。h_fig=figure(color,red,menubar,none,position,0,0,300,300),程序分析:创建一个窗口,背景为红色,没有菜单条,在屏幕的(0,0)位置,宽度、高度为300。,2.用get函数获取指定对象的属性值,语法:get(h_obj)%获取句柄对象所有属性的当前值get(h_obj,PropertyName)%获取句柄对象指定属性的当前值,3.用set函数设置对象的属性值,语法:set(h_obj)%显示句柄对象所有属性和属性值set(h_obj,PropertyName)%显示句柄对象指定属性名的属性值set(h_obj,PropertyName,PropertyValue)%设置句柄对象指定属性的属性值set(h_obj,PropertyStructure)%用结构数组设置句柄对象指定属性的属性值,4.6 图形用户界面(GUI)设计,MATLAB设计图形用户界面的方法有两种:使用可视化的界面环境和通过编写程序。,一、可视化的界面环境,MATLAB提供了一个可视化的图形用户界面开发环境GUIDE(Graphical User Interface Development Environment),打开可视化界面环境的方法有以下几种:(1)选择菜单“File”“New”“GUI”命令;(2)在命令窗口输入“Guide”命令或输入“Guide Filename”就会出现Guide快速开始界面。,用户界面开发环境被分为四个部分:,菜单栏Guide工具栏图形控件面板界面编辑客户区,GUI开发过程可分为4个步骤:,菜单的设计和布局菜单的编程GUI界面的设计和布局GUI的编程,GUIDE环境将建立的GUI文件保存为两个伴随文件:FIG文件和M文件,二、GUIDE常用工具,Layout Editor:布局编辑器Alignment Tool:对齐工具Property Inspector:对象属性观察器Menu Editor:菜单编辑器Object Browser:对象浏览器,三、菜单,1.使用菜单编辑器创建菜单,2.编程创建菜单,3.回调函数,语法:h_menu=uimenu(h_parent,propertyname,propervalue,),【例】编程创建如图所示的菜单。,h_fig=gcfh_fig=1 h_menu=uimenu(h_fig,label,Paint);%创建菜单Paint h_menu1=uimenu(h_menu,label,Circle);%创建Paint的子菜单Circle h_menu2=uimenu(h_menu,label,Color);%创建Paint的子菜单Color h_menu21=uimenu(h_menu2,label,Red);%创建Color的子菜单Red h_menu22=uimenu(h_menu2,label,Blue);%创建Color的子菜单Blue,【上例续】将已创建的菜单修改,并添加回调函数。,h_menu21=uimenu(h_menu2,label,Red,callback,set(h_fig,color,red)%创建Color的子菜单Red将图形背景为红色h_menu22=uimenu(h_menu2,label,Blue,callback,set(h_fig,color,blue)%创建Color的子菜单Blue将图形背景为蓝色,四、控件,1.常用控件,2.控件的创建,(1)在可视化界面环境中创建控件(2)用uicontrol命令创建控件,语法:h_control=uicontrol(h_Parent,PropertyName,ProperValue,),五、GUI应用举例,【例】使用控件设计用户界面,根据阻尼系数绘制二阶系统的时域曲线。功能:在图形用户界面中,通过弹出式菜单选择二阶系统的阻尼系数,然后单击不同按钮在坐标轴中绘制不同阻尼系数不同颜色的时域曲线。,