matlab动画制作.docx

上传人:b****7 文档编号:11200123 上传时间:2023-02-25 格式:DOCX 页数:20 大小:325.15KB
下载 相关 举报
matlab动画制作.docx_第1页
第1页 / 共20页
matlab动画制作.docx_第2页
第2页 / 共20页
matlab动画制作.docx_第3页
第3页 / 共20页
matlab动画制作.docx_第4页
第4页 / 共20页
matlab动画制作.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

matlab动画制作.docx

《matlab动画制作.docx》由会员分享,可在线阅读,更多相关《matlab动画制作.docx(20页珍藏版)》请在冰豆网上搜索。

matlab动画制作.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1