matlab动画制作.docx
- 文档编号:1575618
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:20
- 大小:325.14KB
matlab动画制作.docx
《matlab动画制作.docx》由会员分享,可在线阅读,更多相关《matlab动画制作.docx(20页珍藏版)》请在冰点文库上搜索。
matlab动画制作
点的简单动画
%bydynamic
%2008.6.23
%
t=0:
pi/1000:
10*pi;
x=30*sin(t);
y=30*cos(t);
z=t;
plot3(x,y,z);
holdon
%axisequal
comet3(x,y,z,0.5)
%%
%bydynamic
%2008.6.13
%
vx=100*cos(1/4*pi);
vy=100*sin(1/4*pi);
t=0:
0.001:
15;
x=vx*t;
y=vy*t-9.8*t.^2/2;
comet(x,y)
%%
%bydynamic
%2008.6.13
%
vx=100*cos(1/4*pi);
vy=100*sin(1/4*pi);
t=0:
0.001:
15;
x=vx*t;
y=vy*t-9.8*t.^2/2;
comet(x,y)
%%
%一般的过程
%擦除重绘模式动画
%选择一个擦除模式
set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建
%
%需要执行一些图形计算命令
%
%循环语句中更新坐标数据,一般使用for或者while
fori=1:
n
%
%必要的MATLAB命令
%
set(h,'xdata',xdata,'ydta',ydata)%更新图像的坐标数据
drownnow%刷新屏幕
%
%其它Matlab语句
%
End
%%
%运动的小球
%functionf=anim_ball(K,ki)
%
%演示红色小球沿一条封闭旋螺线运动的实时动画
%仅演示实时动画的调用格式为anim_ball(K)
%既演示实时动画又拍摄照片的调用格式为f=anim_ball(K,ki)
%K红球运动的循环数(不小于1)
%ki指定拍摄照片的瞬间,取1到1034间的任意整数
%f存储拍摄的照片数据,可用image(f.cdata)观察照片
%产生封闭的运动轨线
%
%
%bydynamic
%allrightsreservedby
%2007.10.26
%
t1=(0:
1000)/1000*10*pi;
x1=cos(t1);y1=sin(t1);z1=-t1;
t2=(0:
10)/10;
x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(x2));
t3=t2;
z3=(1-t3)*z1(end);x3=zeros(size(z3));y3=x3;
t4=t2;
x4=t4;y4=zeros(size(x4));z4=y4;
x=[x1x2x3x4];y=[y1y2y3y4];z=[z1z2z3z4];
h=figure('numbertitle','off','name','擦除动画演示(运动的小球)——Matlabsky');
plot3(x,y,z,'b')
axisoff
%绘制红点
h=line('Color',[100],'Marker','.','MarkerSize',40,'EraseMode','xor');%擦除模式设为xor
n=length(x);
i=1;j=1;
%循环改变坐标,表现为小球运动
while1
if~ishandle(h),return,end
set(h,'xdata',x(i),'ydata',y(i),'zdata',z(i));
drawnow;
pause(0.0005)%这里设置小球运动速度
i=i+1;
ifnargin==2&&nargout==1
if(i==ki&&j==1);f=getframe(gcf);end%获取指定的帧,保存到f中
end
ifi>n
%判断是否运行了一周,是将i设置为1,并将运行周数j加1
i=1;j=j+1;
%判断是否到指定的运行周数,是,退出
ifj>K;break;end
end
end
%%
%挂摆横梁
%bydynamic
%2008.6.9
%
h=figure('numbertitle','on','name','擦除动画演示(挂摆横梁)——Matlabsky');
%绘制横梁
plot([-0.2;0.2],[0;0],'-k','linewidth',20);
%画初始位置的单摆
g=0.98;%重力加速度,可以调节摆的摆速
l=1;%摆长
theta0=pi/4;%初始角度
x0=l*sin(theta0);%初始x坐标
y0=-l*cos(theta0);%初始y坐标
axis([-0.75,0.75,-1.25,0]);
axisoff
%创建摆锤
head=line(x0,y0,'color','r','linestyle','.','erasemode','xor','markersize',40);%擦除模式为xor
%创建摆杆
body=line([0;x0],[-0.05;y0],'color','b','linestyle','-','erasemode','xor');
%摆的运动
t=0;%时间变量
dt=0.01;%时间增量
while1
t=t+dt;
theta=theta0*cos(sqrt(g/l)*t);%单摆角度与时间的关系
x=l*sin(theta);
y=-l*cos(theta);
if~ishandle(h),return,end
set(head,'xdata',x,'ydata',y);%改变擦除对象的坐标数据
set(body,'xdata',[0;x],'ydata',[-0.05;y]);
drawnow;%刷新屏幕
end
%%
%将下列命令保存到M文件中,直接运行
%Matlab时钟动画演示
%rewritebydynamic
%moreinformationpleasegoto
try
closeall
hfig=figure('NumberTitle','off','name','ClockAnimationDemo--byMatlabSky','MenuBar','none');
theta=linspace(0,6.3,1000);
x1=8*cos(theta);y1=8*sin(theta);
plot(x1,y1,'b','linewidth',1.4)%绘制外表盘
holdon
axisequal
x2=7*cos(theta);y2=7*sin(theta);
plot(x2,y2,'y','linewidth',3.5)%绘制内表盘
fill(0.4*cos(theta),0.4*sin(theta),'r');%绘制指针转轴
axisoff
axis([-1010-1010])
set(gca,'position',[[0.130.050.7750.815]])
title(date,'fontsize',18)
fork=1:
12;
xk=9*cos(-2*pi/12*k+pi/2);
yk=9*sin(-2*pi/12*k+pi/2);
plot([xk/9*8xk/9*7],[yk/9*8yk/9*7],'color',[0.30.80.9]);
text(xk,yk,num2str(k),'fontsize',16,'color',[0.90.30.8],'HorizontalAlignment','center');%表盘时刻标度
end
%计算时针位置
ti=clock;
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;
xh3=4.0*cos(th);
yh3=4.0*sin(th);
xh2=xh3/2+0.5*cos(th-pi/2);
yh2=yh3/2+0.5*sin(th-pi/2);
xh4=xh3/2-0.5*cos(th-pi/2);
yh4=yh3/2-0.5*sin(th-pi/2);
hh=fill([0xh2xh3xh40],[0yh2yh3yh40],[0.60.50.3]);
%计算分针位置
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;
xm3=6.0*cos(tm);
ym3=6.0*sin(tm);
xm2=xm3/2+0.5*cos(tm-pi/2);
ym2=ym3/2+0.5*sin(tm-pi/2);
xm4=xm3/2-0.5*cos(tm-pi/2);
ym4=ym3/2-0.5*sin(tm-pi/2);
hm=fill([0xm2xm3xm40],[0ym2ym3ym40],[0.60.50.3]);
%计算秒针位置
ts=-(ti(6))/60*2*pi+pi/2;
hs=plot([07*cos(ts)],[07*sin(ts)],'color','w','linewidth',2);
set(gcf,'doublebuffer','on');
while1;
ti=clock;%每次读取系统时间,并进行运算
%计算时针位置
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;
xh3=4.0*cos(th);
yh3=4.0*sin(th);
xh2=xh3/2+0.5*cos(th-pi/2);
yh2=yh3/2+0.5*sin(th-pi/2);
xh4=xh3/2-0.5*cos(th-pi/2);
yh4=yh3/2-0.5*sin(th-pi/2);
set(hh,'XData',[0xh2xh3xh40],'YData',[0yh2yh3yh40])
%计算分针位置
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;
xm3=6.0*cos(tm);
ym3=6.0*sin(tm);
xm2=xm3/2+0.5*cos(tm-pi/2);
ym2=ym3/2+0.5*sin(tm-pi/2);
xm4=xm3/2-0.5*cos(tm-pi/2);
ym4=ym3/2-0.5*sin(tm-pi/2);
set(hm,'XData',[0xm2xm3xm40],'YData',[0ym2ym3ym40])
%计算秒针位置
ts=-(ti(6))/60*2*pi+pi/2;
set(hs,'XData',[07*cos(ts)],'YData',[07*sin(ts)])
drawnow;
pause(0.09)
end
catch
'MatlabSky--打造最优、专业和权威的Matlab技术交流平台!
更多信息参见:
web">' return end %% %小球绕跑道运动 %rewritebydynamic %moreinformationpleasegoto % figure('numbertitle','off','name','MatlabAnimationDemo--bymatlabsky','MenuBar','none') prompt={'请输入速度v: ','请输入长度L: ','请输入半径r: '}; default={'5','10','2'}; v=5;L=10;r=2; p=inputdlg(prompt,'输入参数',1,default); v=str2double(p (1)); L=str2double(p (2)); r=str2double(p(3)); ifv<=0|L<=0|r<=0 warndlg('Matlabsky提醒您: 输入参数必须为整数','警告') else axis([0,2*r+L,0,2*r]) ox1=r;oy1=r;ox2=r+L;oy2=r; x1=r: 0.015*v: r+L; y1=2*r*ones(size(x1)); thita=0: 0.015*v/r: pi; x2=sin(thita)*r+ox2; y2=cos(thita)*r+oy2; x3=r+L: -0.015*v: r; y3=zeros(size(x3)); x4=-sin(thita)*r+ox1; y4=-cos(thita)*r+oy1; x=[x1x2x3x4]; y=[y1y2y3y4]; plot(x,y); text(0,-2,['长度L='num2str(L)',''半径r='num2str(r)',''速度v='num2str(v)]); axisequal set(gca,'Visible','off') hm=line(r,2*r,'color','red','marker','.','markersize',37,'erasemode','xor'); while1 fori=1: length(x) try set(hm,'xdata',x(i),'ydata',y(i)); pause(0.0003) drawnow catch 'MatlabSky--打造最优、专业和权威的Matlab技术交流平台! 更多信息参见: web">' return end end end end %动态绘制椭圆 clf;axis([-2,2,-2,2]); axisequal; pause (1); h=line(NaN,NaN,'marker','o','linesty','-','erasemode','none'); t=6*pi*(0: 0.02: 1); forn=1: length(t) set(h,'xdata',2*cos(t(1: n)),'ydata',sin(t(1: n))); pause(0.05);%暂停0.05秒 end %% %卫星绕地球旋转演示动画——Matlabsky %bydynamic %2008.12.23 % h=figure('numbertitle','off','name','卫星绕地球旋转演示动画——Matlabsky');%设置标题名字 s1=0: .01: 2*pi; holdon; axisequal;%建立坐标系 axisoff;%除掉Axes r1=10;%地球到太阳的平均距离 r2=3;%卫星的轨道半径 w1=1;%设置地球公转角速度 w2=12;%设置卫星绕地球公转角速度 t=0;%初始时刻 pausetime=.002;%设置视觉暂留时间 sita1=0; sita2=0;%设置开始它们都在水平线上 set(gcf,'doublebuffer','on')%消除抖动 plot(-20,18,'color','r','marker','.','markersize',40); text(-17,18,'太阳');%对太阳进行标识 plot(-20,16,'color','b','marker','.','markersize',20); text(-17,16,'地球');%对地球进行标识 plot(-20,14,'color','w','marker','.','markersize',13); text(-17,14,'卫星');%对卫星进行标识 plot(0,0,'color','r','marker','.','markersize',60);%画太阳 plot(r1*cos(s1),r1*sin(s1));%画地球公转轨道 set(gca,'xlim',[-2020],'ylim',[-2020]); p1=plot(r1*cos(sita1),r1*sin(sita1),'color','b','marker','.','markersize',30);%画地球初始位置 l1=plot(r1*cos(sita1)+r2*cos(s1),r1*sin(sita1)+r2*sin(s1));%画卫星绕地球的公转轨道 p2x=r1*cos(sita1)+r2*cos(sita2); p2y=r1*sin(sita1)+r2*sin(sita2); p2=plot(p2x,p2y,'w','marker','.','markersize',20);%画卫星的初始位置 orbit=line('xdata',p2x,'ydata',p2y,'color','r');%画卫星的运动轨迹 while1 if~ishandle(h),return,end set(p1,'xdata',r1*cos(sita1),'ydata',r1*sin(sita1));%设置地球的运动过程 set(l1,'xdata',r1*cos(sita1)+r2*cos(s1),'ydata',r1*sin(sita1)+r2*sin(s1));%设置卫星绕地球的公转轨道的运动过程 ptempx=r1*cos(sita1)+r2*cos(sita2); ptempy=r1*sin(sita1)+r2*sin(sita2); set(p2,'xdata',ptempx,'ydata',ptempy);%设置卫星的运动过程 p2x=[p2xptempx]; p2y=[p2yptempy]; set(orbit,'xdata',p2x,'ydata',p2y);%设置卫星运动轨迹的显示过程 sita1=sita1+w1*pausetime;%地球相对太阳球转过的角度 sita2=sita2+w2*pausetime;%卫星相对地球转过的角度 pause(pausetime);%视觉暂停 drawnow%刷新屏幕,重绘 end %% %擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画 %bydynamic %2008.12.6 % clear;clc;closeall %定义几组变量.分别代表的含义是: %相对圆心坐标半径最近距离最远距离周期角速度旋转角度 x0=0;y0=0;r0=80;Lmin0=0;Lmax0=0;T0=2160;w0=0*pi/T0;q0=0; x1=0;y1=0;r1=40;Lmin1=25;Lmax1=30;T1=1080;w1=pi/T1;q1=0; x2=0;y2=0;r2=20;Lmin2=8;Lmax2=10;T2=180;w2=pi/T2;q2=0; x3=0;y3=0;r3=10;Lmin3=3;Lmax3=05;T3=30;w3=pi/T3;q3=0; %初始化 hh=figure('numbertitle','off','name','太阳|地球|月亮|卫星,绕转演示动画——Matlabsky'); %设置擦除方式 sun=line(0,0,'color','r','linestyle','.','erasemode','xor','markersize',r0);%太阳 earth=line(x0,y0,'color','k','linestyle','.','erasemode','xor','markersize',r1);%地球 moon=line(x1,y1,'color','b','linestyle','.','erasemode','xor','markersize',r2);%月亮 satellite=line(x2,y2,'color','g','linestyle','.','erasemode','norm','markersize',r3);%卫星 %添加标注 axisoff title('太阳|地球|月亮|卫星','fontname','宋体','fontsize',9,'FontWeight','demi','Color','black'); text(-20,50,'——更多精彩参见'); text(-50,50,'太阳');%对太阳进行标识 line(-55,50,'color','r','marker','.','markersize',80); text(-50,40,'地球');%对地球进行标识 line(-55,40,'color','k','marker','.','markersize',40); text(-50,30,'月亮');%对月亮进行标识 line(-55,30,'color','b','marker','.','markersize',20); text(-50,20,'卫星');%对卫星进行标识 line(-55,20,'color','g','marker','.','markersize',10); %绘制轨道 s1=[0: .01: 2*pi]; line(Lmax1*cos(s1),Lmin1*sin(s1),'linestyle',': ');%画地球的轨迹,是个椭圆 axis([-60,60,-60,60]);%调整坐标轴 %开始画图 t=0; while1 if~ishandle(hh),return,end q0=t*w0;q1=t*w1;q2=t*w2;q3=t*w3;t=t+1;%设置运动规律 ift>=4320;t=0;end%到了一个周期就重置 x0=Lmax0*cos(q1);y1=Lmin0*sin(q1);%设置太阳圆心的坐标(在这个程序里,太阳圆心的坐标是不变的,所以可以省略) x1=x0+Lmax1*cos(q1);y1=y0+Lmin1*sin(q1);%设置地球圆心的坐标 x2=x1+Lmax2*cos(q2);y2=y1+Lmin2*sin(q2);%设置月亮圆心的坐标 x3=x2+Lmax3*cos(q3);y3=y2+Lmin3*sin(q3);%设置卫星圆心的坐标 set(sun,'xdata',x0,'ydata',y0);%画太阳 set(earth,'xdata',x1,'ydata',y1);%画地球 set(moon,'xdata',x2,'ydata',y2);%画月亮 set(satellite,'xdata',x3,'ydata',y3);%画卫星 line('xdata',x2,'ydata',y2,'color','y');%设置月亮的轨迹 line('xdata'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 动画 制作