9、动画制作
- getframe函数可截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量。显然,保存n幅图面就需一个大矩阵。
- moviein(n)函数用来建立一个足够大的n列矩阵。该矩阵用来保存n幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。
- movie(m,n)函数播放由矩阵m所定义的画面n次,缺省时播放一次。
set(f,'color','g'); fplot('sin(t)^2',[1 2]); m=moviein(20); %建立一个20列大矩阵 for i=1:20 view(-37.5+24*(i-1),30) %改变视点 m(:,i)=getframe; %将图形保存到m矩阵 end movie(m); |
10、极坐标图
polar函数用来绘制极坐标图,其调用格式为:
polar(theta,rho,选项)
其中theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。
t=0:pi/50:2*pi; r=sin(t).*cos(t); polar(t,r,'-*'); |
11、figure函数
【例一】
f1 = figure('Name','Myfugure1','MenuBar','None','ToolBar','None','color',[0 1 0]);
说明:第一个参数为该窗口标题;第二个参数为菜单栏设置;第三个参数为工具栏参数设置;第四个参数为窗口背景颜色设置.
【例二】
f2 = figure();
set(f2,'Name','Myfugure2','MenuBar','None','ToolBar','None');
set(f2,'color',get(f2,'color')+0.1);
说明:可以通过set函数修改窗口属性,通过get函数获取窗口属性.
【例三】
f3 = figure() ;
PS.Name = 'Myfigure3';
PS.Color = [0 1 0];
rect = get(0,'screenSize');%获取整个屏幕尺寸
N = 256;%作图窗口尺寸
PS.position = [rect(3)/2-N/2,rect(4)/2-N/2,N,N];%使图像居中
set(f3,PS);
说明:可以通过结构体来设置窗口的属性
【例四】
f1 = figure('Name','Myfugure1','MenuBar','None','ToolBar','None',...
'color',[0 1 0],'Position',[440 234 400 300]);
h1 = uicontrol(f1,'Style','text','String','asdfasfsa',...
'Unit','normalize','Position',[100/440 100/234 200/400 100/300]);
说明: 'normalize'用来设置坐标为相对坐标, 'Position'中的区域的分母为参照坐标(窗口坐标),分子为该文本框相对于窗口的坐标.
【例五】
x =0:pi/20:2*pi;
y = sin(x);
f1 = figure('Name','我的图形窗口','MenuBar','None','ToolBar','None',...
'color',[0 1 0],'Position',[440 234 550 350],'KeyPressFcn','plot(x,y)');
说明:在绘图窗口上响应了一个按下键盘的消息.
【例六】
f1 = figure('Name','我的图形窗口','MenuBar','None','ToolBar','None',...
'color',[0 1 0],'Position',[440 234 550 350],'ResizeFcn','a3');
说明:当绘图窗口尺寸改变时,便会执行a3.m文件.
12、条形图和面积图
13、方向和速度矢量图形
方向和速度矢量图形举例
14、等高线的绘制
meshgrid可以产生网格矩阵,使用格式:
[X,Y] = meshgrid(x,y)
[X,Y] = meshgrid(x)
[X,Y,Z] = meshgrid(x,y,z)
使用示例:
[X,Y] = meshgrid(1:3,10:14).
15、视点控制和图形的旋转
为了使图形的效果更逼真,有时需要从不同的角度观看图形,MATLAB 7语言提供了view、viewmtx和rotate3d等3个命令进行操作。用户可以在命令窗口中调用这3个函数。其中,view函数主要是从不同的角度观察图形;viewmtx给出指定视角的正交转换矩阵;而rotate3d函数可以让用户方便地用鼠标来适时旋转视图
视点控制举例
16、颜色的使用
MATLAB 7有一个叫颜色映像的数据结构来代表颜色值。颜色映像定义为一个有3列和若干行的矩阵。利用0到1之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、黄、蓝3种颜色的强度,形成一种特定的颜色。
17、颜色映像理解
18、颜色映像使用
句colormap(M)将矩阵M作为当前图形窗口所用的颜色映像。例如,colormap(cool)装入了一个有64个输入项的cool颜色映像。colormap default装入了默认的颜色映像(hsv)。
函数plot、plot3、contour和contour3不使用颜色映像,它们使用列在plot颜色和线形表中的颜色。而大多数其他绘图函数,比如mesh、surf、fill、pcolor和它们的各种变形函数,使用当前的颜色映像。
19、颜色映像显示
20、颜色映像的建立和修改
颜色映像就是矩阵,意味着你可以象其他数组那样对它们进行操作。函数brighten就利用这一点通过调整一个给定的颜色映像来增加或减少暗色的强度。
用户可以通过生成m×3的矩阵mamap来建立自己的颜色映像,并用colormap(mymap)来安装它。颜色映像矩阵的每一个值都必须在0和1之间。如果企图用大于或小于3列的矩阵或者包含着比0小比1大的任意值,函数colormap会提示一个错误然后退出。
21、光照控制
光照控制举例
22、绘图颜色填充
使用fill函数可以进行颜色填充.
使用格式:
fill(X,Y,’color’);
【例一】:三角形
x = [0 1 0]; y = [1 0 0]; fill(x,y,'r');
|
【例二】:填充圆形
t = 0:(2*pi/100):(2*pi) ; x = sin(t) ; y = cos(t) ; fill(x,y,'b');
|
【例三】:填充四分之一圆
t = 0:(2*pi/100):(pi/2) ;%绘制四分之一圆 x = sin(t) ; y = cos(t)+1 ; a = [x 0];%加上圆心横坐标 b = [y 1];%加上圆心纵坐标 fill(a,b,'b');
|
【例四】:填充不规则图形
axis([-2 2 -2 2]); hold on ; x = 0:0.1:1 ; y = 1- x ; plot(x,y); a = [0 1 0]; b = [1 0 0]; fill(a,b,'r');%用红色填充 clear x ; T = solve('x*x - 1 + x = 0');%解出y =x^2与y = 1-x的交点,此时交点值有两个 x1 = 0:0.01:T(2) ;%T(2)为第一象限的交点 y1 = x1.^2; a1 = [x1 1]; b1 = [y1 0]; plot(x1,y1,'w'); fill(a1,b1,'w');%用白色填充 |
【例五】:填充月牙形
clear all; axis([-2,2,-2,2]); hold on ; %解曲线x^2+y^2=1与x^2+(y+1.5)^2=4的交点 [x2 y2] = solve('x^2+y^2 = 1,x^2+(y+1.5)^2=4'); %x2(1)表示第一个交点的横坐标 %x2(2)表示第二个交点的横坐标 x = x2(1):0.001:x2(2); y = sqrt(1-x.^2); y1 = sqrt(4-x.^2)-1.5; a = [x x] ; b = [y y1]; fill(a,b,'y'); |
部分三维图形的绘制
【例一】
[x,y]=meshgrid(-8:0.5:8);%产生网格坐标矩阵 z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1); mesh(x,y,z); title('mesh(x,y,z)'); subplot(2,2,2); meshc(x,y,z); title('meshc(x,y,z)'); subplot(2,2,3); meshz(x,y,z); title('meshz(x,y,z)'); subplot(2,2,4); surf(x,y,z); title('surf(x,y,z)'); |
【例二】:标准三维曲面
t=0:pi/20:2*pi; [x,y,z]= cylinder(2+sin(t),30); subplot(2,2,1); surf(x,y,z); subplot(2,2,2); [x,y,z]=sphere; surf(x,y,z); subplot(2,1,2); [x,y,z]=peaks(30); surf(x,y,z); |
【例三】:多峰函数的瀑布图及等高线图
subplot(1,2,1); [X,Y,Z]=peaks(30); waterfall(X,Y,Z) xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); subplot(1,2,2); contour3(X,Y,Z,12,'k'); %其中12代表高度的等级数 xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); |
24、视点处理
view可以进行视点处理,设置看图形的角度.
一般使用格式:
view([x y z])
【例一】:变换角度
t=0:pi/20:2*pi;
[x,y,z]= cylinder(2+sin(t),30);
subplot(2,2,1);
surf(x,y,z);
for i=0:1:10
view([10*i,8*i+2,50]);
pause(1);
i = i+1 ;
end
【例二】:变换维数
t=0:pi/20:2*pi; [x,y,z]= cylinder(2+sin(t),30); subplot(1,2,1); surf(x,y,z); view(3); subplot(1,2,2); surf(x,y,z); view(2); |
25、自适应绘图函数---fplot
fplot函数的调用格式为:
fplot(fname,lims,tol,选项)
其中fname为函数名,以字符串形式出现,lims为x,y的取值范围,tol为相对允许误差,其系统默认值为2e-3。选项定义与plot函数相同。
【例一】 fplot('sin(x)+cos(x)',[0 12])
|
|
【例二】 %%%%%%myfun.m%%%%%% function Y = myfun(x) Y(:,1) = 200*sin(x(:))./x(:); Y(:,2) = x(:).^2; %%%%%%%%%%%%%%%%% fh = @myfun;%创建函数句柄 fplot(fh,[-20 20])
|