第5章 Matlab在图形设计上的应用.docx
《第5章 Matlab在图形设计上的应用.docx》由会员分享,可在线阅读,更多相关《第5章 Matlab在图形设计上的应用.docx(17页珍藏版)》请在冰豆网上搜索。
第5章Matlab在图形设计上的应用
Matlab在二维图形设计上的应用
Matlab不仅具有强大的数值运算功能,也同样具有非常强大的二维和三维图形绘制功能,尤其擅长于将各种科学运算结果的可视化。
计算的可视化可以将不直观的数据通过图形来表示,从而发现其中的内在关系。
Matlab的图形命令格式简单,可以使用不同的线形,色彩、数据点标记和标注等来修饰。
Matlab(MatrixLaboratory)是MathWorks公司开发的,目前国际上最流行、应用最广泛的科学与工程计算软件。
它广泛应用于自动控制、数学计算、信号分析、计算机技术、图像信号处理、财务分析、航天工业、汽车工业、生物医学工程、语音处理和雷达工业等各行各业,也是外高校和研究部门进行许多科学研究的重要工具。
由于它具有强大的计算和绘图功能、大量稳定可靠的算法库和简洁高效的编程语言,已成为数学工具方面事实上的标准。
Matlab不仅具有强大的数值运算功能,也同样具有非常强大的二维和三维图形绘制功能,尤其擅长于将各种科学运算结果的可视化,由于系统采用面向对象的技术和丰富的矩阵运算,所以在图形处理方面即常方便又高效。
计算的可视化可以将不直观的数据通过图形来表示,从而发现其中的内在关系。
Matlab的图形命令格式简单,可以使用不同的线形,色彩、数据点标记和标注等来修饰。
本章专门介绍Matlab在二维、三维图形设计的一些基本命令格式以及一些简单的运用。
5.1二维图形
一、plot函数
plot命令是Matlab中最简单最常用的绘图命令,主要用来绘制二维曲线。
命令格式为plot(x,y):
x表示要绘制的数据点的横坐标,可省略。
如果省略则以数据点的序号绘制横坐标。
y表示数据点的数值,以向量形式表示。
函数格式:
plot(x,y)其中x和y为坐标向量
函数功能:
以向量x、y为轴,绘制曲线。
【例1】
plot([1,3,4,2,5])%长度为5的向量
绘制向量x,y的曲线,大多数情况下,我们要控制曲线的横坐标,这时应该增加一个和y具有相同列数的向量x。
【例1】在区间0≤X≤2内,绘制正弦曲线Y=SIN(X),其程序为:
x=0:
pi/100:
2*pi;
y=sin(x);
plot(x,y);gridon%x,y的长度相等
【例2】同时绘制正、余弦两条曲线Y1=SIN(X)和Y2=COS(X),其程序为:
x=0:
pi/100:
2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
plot函数还可以为plot(x,y1,x,y2,x,y3,…)形式,其功能是以公共向量x为X轴,分别以y1,y2,y3,…为Y轴,在同一幅图内绘制出多条曲线。
1)绘制矩阵
plot(y)中,y可以是具有多个行的向量,即一个矩阵。
绘出的图形是与y的行数相同数目曲线。
示例1-3
x=0:
.01:
2*pi;
y=[sin(x);2*sin(x);3*sin(x)]%y是一个三行的矩阵
plot(x,y);gridon
2)绘制混合曲线
当x,y是向量或是矩阵时,分别有下列几情况:
1.如果x是向量,而y是矩阵,则x的长度与矩阵y的行数或必须相等。
如果x的长度与y的行数、相等,则向量x和矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等,则向量x和矩阵y的每行向量对应画一条曲线;如果y是方阵,则x与每列y画一条曲线。
2.如果x是矩阵,y是向量,规则与上述类似。
3.如果是两个矩阵,并且大小相等,则x,y对应的每列画一条曲线。
示例1-4
x1=[123];
y1=[123;456]
figure,plot(x1,y1);%每行一条曲线
y2=[12;34;56]
figure,plot(x1,y2);%每列一条曲线
figure,plot(y1,x1);
figure,plot(y2,x1);
x2=[111;222]
figure,plot(x2,y1);%按列与列对应的方式画曲线
plot(x1,y1)
plot(x1,y2)
plot(y1,x1)
plot(y2,x1)
plot(x2,y1)
3)绘制多条曲线
plot(x1,y1,x2,y2,...),这个命令相当于plot(x1,y1)+plot(x2,y2)+…;将这些命令写在同一个函数里,Matlab自动以不同的颜色来绘制曲线。
不同的矩阵,维数可以不同。
示例1-5
x=0:
.1:
2*pi;
plot(x,sin(x),x,cos(x),x,sin(3*x));%在同一幅图中画三条曲线
4)绘制复数
plot(z)中z为复向量是,plot(z)与plot(real(z),imag(z))是等效的,以实部为横坐标,虚部为纵坐标。
示例1-6
x2=[111;222]
y1=[123;456]
z=x2+y1*i
plot(z)%以实部为横坐标,虚部为纵坐标
(一)线型与颜色
格式:
plot(x,y1,’cs’,...)
其中c表示颜色,s表示线型。
(二)图形标记
在绘制图形的同时,可以对图形加上一些说明,如图形名称、图形某一部分的含义、坐标说明等,将这些操作称为添加图形标记。
添加图名的语句是title(s);s就是图名,是一个字符串,可以是中文的。
title(‘加图形标题');
%绘制一个周期的正弦曲线,并添加标题”sin(x)的图像”
x=0:
.1:
2*pi;
y=sin(x);
plot(x,y);
title('sin(x)的图像')%添加标题
添加坐标轴名:
xlabel(s),ylabel(s),分别添加横纵坐标轴名称。
xlabel('加X轴标记');
ylabel('加Y轴标记');
x=0:
.1:
2*pi;
y=sin(x);
plot(x,y);
title('sin(x)的图像')%添加标题
xlabel('xcoordinate')%添加横坐标
ylabel('ycoordinate')%添加纵坐标
text(X,Y,'添加文本');
(三)设定坐标轴
用户若对坐标系统不满意,可利用axis命令对其重新设定。
axis([xminxmaxyminymax])设定最大和最小值
axis(’auto’)将坐标系统返回到自动缺省状态
axis(’square’)将当前图形设置为方形
axis(’equal’)两个坐标因子设成相等
axis(’off’)关闭坐标系统
axis(’on’)显示坐标系统
【例4】在坐标范围0≤X≤2π,-2≤Y≤2内重新绘制正弦曲线,其程序为:
x=linspace(0,2*pi,60);生成含有60个数据元素的向量X
y=sin(x);
plot(x,y);
axis([02*pi-22]);设定坐标轴范围
(四)加图例
给图形加图例命令为legend。
该命令把图例放置在图形空白处,用户还可以通过鼠标移动图例,将其放到希望的位置。
格式:
legend(s,pos),s是字符串,pos是位置,
表pos取值对应的实际位置
pos
0
1
2
3
4
-1
位置
自动取最佳位置
右上角(默认)
左上角
左下角
右下角
图右侧
示例
在图形窗口添加文字注释
x=0:
.1:
2*pi;
plot(x,sin(x));
holdon
plot(x,cos(x),'o');
title('y1=sin(x),y2=cos(x)');%添加标题
xlabel('x')%添加坐标名
legend('sin(x)','cos(x)',4)%在图的右下角添加注释
text(pi,sin(pi),'x=\pi');%在pi,sin(pi)处添加文字注释
(一)subplot(m,n,p)
该命令将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。
【例6】在一个图形窗口中同时绘制正弦、余弦、正切、余切曲线,程序为:
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);eps为系统内部常数
ct=cos(x)./(sin(x)+eps);
subplot(2,2,1);分成2×2区域且指定1号为活动区
plot(x,y);
title('sin(x)');
axis([02*pi-11]);
subplot(2,2,2);
命令为subplot(m,n,k)%使m×n幅子图中的第k幅为当前图
示例3-1
演示子图命令
x=0:
.1:
2*pi;
subplot(2,2,1);%将绘图区分为2×2的区域,当前为第一幅
plot(x,sin(x));
subplot(4,4,3)%将绘图区分为4×4的区域,当前为第三幅
plot(x,sin(2*x))
subplot(4,4,4)%将绘图区分为4×4的区域,当前为第四幅
plot(x,sin(3*x))
subplot(4,4,7)%将绘图区分为4×4的区域,当前为第七幅
plot(x,sin(4*x))
subplot(4,4,8)%将绘图区分为4×4的区域,当前为第八幅
plot(x,sin(5*x))
subplot(2,2,3);%将绘图区分为2×2的区域,当前为第三幅
plot(x,cos(x),'o');
subplot(2,2,4);%将绘图区分为2×2的区域,当前为第四幅
plot(x,cos(2*x),'.');
结果如下
(二)多图形窗口
需要建立多个图形窗口,绘制并保持每一个窗口的图形,可以使用figure命令。
每执行一次figure命令,就创建一个新的图形窗口,该窗口自动为活动窗口,若需要还可以返回该窗口的识别号码,称该号码为句柄。
句柄显示在图形窗口的标题栏中,即图形窗口标题。
用户可通过句柄激活或关闭某图形窗口,而axis、xlabel、title等许多命令也只对活动窗口有效。
重新绘制上例4个图形,程序变动后如下:
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin(x)+eps);
H1=figure;创建新窗口并返回句柄到变量H1
plot(x,y);绘制图形并设置有关属性
title('sin(x)');
axis([02*pi-11]);
H2=figure;创建第二个窗口并返回句柄到变量H2
plot(x,z);绘制图形并设置有关属性
title('cos(x)');
(三)hold命令
若在已存在图形窗口中用plot命令继续添加新的图形内容,可使用图形保持命令hold。
发出命令holdon后,再执行plot命令,在保持原有图形或曲线的基础上,添加新绘制的图形。
阅读如下程序:
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
plot(x,y,'b');绘制正弦曲线
holdon;设置图形保持状态
plot(x,z,'g');保持正弦曲线同时绘制余弦曲线
axis([02*pi-11]);
legend('cos','sin');
holdoff关闭图形保持
三、函数f(x)曲线
fplot函数则可自适应地对函数进行采样,能更好地反应函数的变化规律。
fplot函数格式:
fplot(fname,lims,tol)
其中fname为函数名,以字符串形式出现,lims为变量取值范围,tol为相对允许误差,其其系统默认值为2e-3。
例:
fplot(‘sin(x)’,[02*pi],’-+’)
fplot(‘[sin(x),cos(x)]’,[02*pi],1e-3,’·’)同时绘制正弦、余弦曲线
为绘制f(x)=cos(tan(πx))曲线,可先建立函数文件fct.m,其内容为:
functiony=fct(x)
y=cos(tan(pi*x));
用fplot函数调用fct.m函数,其命令为:
fplot(‘fct’,[01],1e-4)
5.2特殊坐标图形
一、对数坐标图形
(一)loglog(x,y)双对数坐标
【例7】绘制y=|1000sin(4x)|+1的双对数坐标图。
程序为:
x=[0:
0.1:
2*pi];
y=abs(1000*sin(4*x))+1;
loglog(x,y);双对数坐标绘图命令
(二)单对数坐标
以X轴为对数重新绘制上述曲线,程序为:
x=[0:
0.01:
2*pi]
y=abs(1000*sin(4*x))+1
semilogx(x,y);单对数X轴绘图命令
同样,可以以Y轴为对数重新绘制上述曲线,程序为:
x=[0:
0.01:
2*pi]
y=abs(1000*sin(4*x))+1
semilogy(x,y);单对数Y轴绘图命令
二、极坐标图
函数polar(theta,rho)用来绘制极坐标图,theta为极坐标角度,rho为极坐标半径
【例8】绘制sin(2*θ)*cos(2*θ)的极坐标图,程序为:
theta=[0:
0.01:
2*pi];
rho=sin(2*theta).*cos(2*theta);
polar(theta,rho);绘制极坐标图命令
title('polarplot');
5.3其它图形函数
除plot等基本绘图命令外,Matlab系统提供了许多其它特殊绘图函数,这里举一些代表性例子,更详细的信息用户可随时查阅在线帮助,其对应的M-file文件存放在系统\matlab\toolbox\matlab目录下。
5.3其它图形函数
一、阶梯图形
函数stairs(x,y)可以绘制阶梯图形,如下列程序段:
x=[-2.5:
0.25:
2.5];
y=exp(-x.*x);
stairs(x,y);绘制阶梯图形命令
title('stairsplot');
5.3其它图形函数
二、条形图形
函数bar(x,y)可以绘制条形图形,如下列程序段将绘制条形图形
x=[-2.5:
0.25:
2.5];
y=exp(-x.*x);
bar(x,y);绘制条形图命令
5.3其它图形函数
三、填充图形
fill(x,y,’c’)函数用来绘制并填充二维多边图形,x和y为二维多边形顶点坐标向量。
字符’c’规定填充颜色,其取值前已叙述。
下述程序段绘制一正方形并以黄色填充:
5.3其它图形函数
x=[01100];正方形顶点坐标向量
y=[00110];
fill(x,y,'y');绘制并以黄色填充正方形图
再如:
x=[0:
0.025:
2*pi];
y=sin(3*x);
fill(x,y,[0.50.30.4]);颜色向量
Matlab系统可用向量表示颜色,通常称其为颜色向量。
基本颜色向量用[rgb]表示,即RGB颜色组合;以RGB为基本色,通过r,g,b在0~1范围内的不同取值可以组合出各种颜色。
二维绘图函数小结
plot二维图形基本函数
fplotf(x)函数曲线绘制
fill填充二维多边图形
polar极坐标图
bar条形图
loglog双对数坐标图
semilogxX轴为对数的坐标图
semilogyY轴为对数的坐标图
stairs阶梯形图
axis设置坐标轴
clf清除图形窗口内容
close关闭图形窗口
5.4三维图形
一、plot3函数
最基本的三维图形函数为plot3,它是将二维函数plot的有关功能扩展到三维空间,用来绘制三维图形。
函数格式:
plot3(x1,y1,z1,c1,x2,y2,z2,c2,…)
其中x1,y1,z1…表示三维坐标向量,c1,c2…表示线形或颜色。
函数功能:
以向量x,y,z为坐标,绘制三维曲线。
【例9】绘制三维螺旋曲线,其程序为:
t=0:
pi/50:
10*pi;
y1=sin(t),y2=cos(t);
plot3(y1,y2,t);
title('helix'),text(0,0,0,'origin');
xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t');
grid;
二、mesh函数
mesh函数用于绘制三维网格图。
在不需要绘制特别精细的三维曲面结构图时,可以通过绘制三维网格图来表示三维曲面。
三维曲面的网格图最突出的优点是:
它较好地解决了实验数据在三维空间的可视化问题。
函数格式:
mesh(x,y,z,c)
其中x,y控制X和Y轴坐标,矩阵z是由(x,y)求得Z轴坐标,(x,y,z)组成了三维空间的网格点;c用于控制网格点颜色。
三、surf函数
surf用于绘制三维曲面图,各线条之间的补面用颜色填充。
surf函数和mesh函数的调用格式一致。
函数格式:
surf(x,y,z)
其中x,y控制X和Y轴坐标,矩阵z是由x,y求得的曲面上Z轴坐标。
四、视点
视点位置可由方位角和仰角表示。
方位角又称旋转角为视点位置在XY平面上的投影与X轴形成的角度,正值表示逆时针,负值表示顺时针。
仰角又称视角为XY平面的上仰或下俯角,正值表示视点在XY平面上方,负值表示视点在XY平面下方。
从不同视点绘制三维图形的函数为view。
view(az,el)中的az为方位角,el为仰角。
通过系统提供的多峰函数peaks的绘制例子,可进一步说明视点对图形的影响,以及view(az,el)函数的使用。
【例12】不同视角图形
p=peaks;系统提供的多峰函数
subplot(2,2,1);
mesh(peaks,p);
view(-37.5,30);指定子图1的视点
title('azimuth=-37.5,elevation=30')
subplot(2,2,2);
mesh(peaks,p);
view(-17,60);指定子图2的视点
title('azimuth=-17,elevation=60')
五、等高线图
等高线图可通过函数contour3绘制。
【例13】多峰函数peaks的等高线图
[x,y,z]=peaks(30);
contour3(x,y,z,16);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('contour3ofpeaks')
5.5图形句柄
一、句柄
在Matlab系统中,绘图命令产生的每一个部分称为图形对象,系统在创建每一个对象时,都为该对象分配唯一的一个值,称其为句柄,因此句柄就是图形对象标识符。
对象、句柄以及图形对象等概念其实质是统一的,系统将每一个对象按树型层次结构组织起来,这些对象包括根对象,通常为计算机屏幕、图形窗口、坐标系统、线条、曲面、文本串、用户界面控制等。
根对象可包含一个或多个图形窗口对象,而一个图形窗口对象又可包含一组或多组坐标系子对象,线条、文本等其它对象都是坐标系的子对象。
所有创建对象的函数当父对象不存在时,都会自动创建它。
计算机屏幕作为根对象自动建立,其句柄值为0。
而Hf_f=figure命令则建立图形窗口对象,并返回它的句柄值给变量Hf_f。
图形窗口的句柄为一整数,并显示在该窗口的标题栏,其它图形对象的句柄为浮点数,Matlab提供了一系列与句柄操作有关的函数,如gcf、gca等。
为便于识别,用大写字母开头的变量表示句柄,如Hf_f等。
二、对象属性
所有图形对象都具有控制对象显示的属性。
这些属性既包括对象的一般信息,如对象类型、对象的父对象及子对象等,也包括对象的一些特定信息,如坐标系对象的刻度等。
用户可以获取、设置对象属性,以达到控制对象的目的。
当创建一个对象时,系统用一组默认属性值定制对象,用户梢酝üget命令获取这些属性值,同时也可通过set命令重新设置对象属性。
set命令格式为:
set(H,’name’,value,…)将图形对象H的name属性设置为value
其中H为句柄,name为属性名,value为name的属性值。
5.5图形句柄
用set命令可以方便地设置图形对象属性,如下列程序段就是通过属性来定制图形。
x=[0:
0.1:
4*pi];
H=plot(x,sin(x));返回正弦曲线句柄H
set(H,'LineStyle','*','LineWidth',0.1);设置正弦曲线线型与线宽
其中'LineStyle'为线型属性,'LineWidth'为线宽属性。
5.5图形句柄
利用get(H)命令可以返回当前句柄H对象的属性。
键入命令:
get(H)系统返回当前图形对象的有关属性:
象H=get(0,’CurrentFigure’)则返回根对象的’CurrentFigure’的属性值,即当前图形窗口的句柄,相当于函数gcf。
get(gcf,’Children’)则返回当前坐标系对象的句柄;类似的操作用户可在使用Matlab的过程中不断积累。
5.5图形句柄
三、句柄应用
利用句柄操作的有关函数,用户可以查找、访问图形对象,以达到定制对象属性,改变对象显示效果的目的。
x=-pi:
pi/20:
pi;
y=sin(x);z=cos(x);
plot(x,y,'r',x,z,'g');
Hl_lines=get(gca,'Children');获取正、余曲线句柄向量Hl_lines
fork=1:
size(Hl_lines)
ifget(Hl_lines(k),‘Color’)==[010][010]为绿颜色向Hl_green=Hl_lines(k)返回绿色线条句柄
end
end
5.6动画设计
如果将Matlab产生的多幅图形保存起来,并利用系统提供的函数进行播放,就可产生动画效果。
系统所提供的动画功能函数有getframe、moviein和movie。
getframe函数
getframe函数可将当前图形窗口作为一个画面取下并保存,格式为:
m=getframe它将每一帧画面信息数据截取下来整理成列向量。
该函数截取图形的点阵信息,图形窗口的大小,对数据向量的大小影响较大,窗口越大,所需存储容量越大。
而图形的复杂性对数据容量要求没有直接的关系。
5.6动画设计
moviein函数
函数m=moviein(n)用来建立一个足够大的n列的矩阵m,用来保存n幅画面的数据,以备播放。
movie函数
movie(m,n)以每秒n幅图形的速度播放由矩阵m的列向量所组成的画面。
5.6动画设计
【例14】播放一个不断变化的眼球程序段。
m=moviein(20);建立一个20个列向量组成的矩阵
forj=1:
20
plot(fft(eye(j+10)))绘制出每一幅眼球图并保存到m矩阵中
m(:
j)=getframe;
end
movie(m,10);以每秒10幅的速度播放画面
5.6动画设计
再如下述程序段播放一个直径不断变化的球体。
n=30
[x,y,z