




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.MATLAB技术论坛电子期刊编辑:*iezhh制作:MATLAB技术论坛:MatlabSky©所有.matlabsky.第1期2021.09No.1中国权威MATLAB论坛核心期刊MATLAB技术论坛简介目录1动画的制作1.1电影动画1.1.1
电影动画演示实例〔一〕——千变万化的线条1.1.2
电影动画演示实例〔二〕——跳动的红心1.2擦除动画1.2.1
Matlab擦除重绘动画实例(一)——运动的小球1.2.2
Matlab擦除重绘动画实例(二)——单摆横梁1.2.3
Matlab擦除重绘动画实例(三)——时钟演示1.2.4
Matlab擦除重绘动画实例(四)——小球绕跑道运动1.3质点动画1.3.1
质点动画演示(一)1.3.2
质点动画演示(二)——平抛运动1.3.3
质点动画演示(三)——导弹发射1.4霓虹灯效果动画1.4.1
霓虹灯效果动画实例〔一〕——霓虹闪烁的球体1.4.2
霓虹灯效果动画实例〔二〕——
一颗花心1.5GIF格式动画制作1.5.1
GIF格式动画制作案例——绕螺旋线运动的小球2动画的保存3有关动画制作的实验报告4更多动画实例4.1
电影动画演示——旋转的山峰4.2
擦除动画实例——卫星绕地球运动(注释很详细)4.3
擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画(注释很详细)5光学夫朗和费衍射现象模拟Matlab源代码6牛顿环动画演示Matlab源代码7使用MATLAB绘制原子轨道和电子云图形8振动摆MATLAB动画源代码MATLAB根底应用版块Matlab中动画的实现、制作和保存.matlabsky./thread-592-1-1.htmlMatlab确实是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情。但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。1动画的制作Matlab中动画实现的方法主要有下面三种1.1电影动画帖子地址:.matlabsky./thread-593-1-1.html从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序像电影一样播放。电影动画的好处就是,运行一次可以屡次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。MATLAB中,创立电影动画的过程分为以下四步:step1:调用moviein函数对内存进展初始化(该步骤在Matlab5.3以上均可省略),创立一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形〔此处称为帧〕。step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创立一个电影动画矩阵。getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。该函数格式有:(1)F=gefframe,从当前图形框中得到动画帧(2)F=gefframe(h),从图形句柄h中得到动画帧(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧step3:调用movie函数按照指定的速度和次数运行该电影动画。当创立了一系列的动画帧后,可以利用movie函数播放这些动画帧。该函数的主要格式有:(1)movie(M),将矩阵M中的动画帧播放一次(2)movie(M,n),将矩阵M中的动画帧播放n次(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。该方法的经典格式是:%录制电影动画forj=1:n%%这里输入我们的绘图命令%M(j)=getframe;endmovie(M)%单帧显示方法f=getframe(gcf);colormap(f.colormap);image(f.cdata);电影动画演示实例〔一〕——千变万化的线条%bydynamic%seealso.matlabsky.closeallfigure('toolbar','none','menubar','none','NumberTitle',...'off','name','电影动画录制——Matlabsky');a*isequalm=moviein(20,gcf);%在当前窗口下,截取20帧set(gca,'ne*tplot','replacechildren','bo*','off','color','b','*grid','on')title('截图当前窗口的20帧动画')forj=1:20
plot(fft(eye(j+16)))
m(:,j)=getframe(gcf);%截取动画帧,保存到m变量中endhh=figure('toolbar','none','menubar','none','NumberTitle',...'off','name','电影动画播放——Matlabsky');title('将截取的动画播放5遍')set(gca,{'*tick','ytick','*ticklabel','yticklabel'},{[],[],[],[]})movie(hh,m,5)电影动画演示实例〔二〕——跳动的红心帖子地址:.matlabsky./viewthread.php"tid=9489%by*iezhh*=linspace(-2,2,100);[*,Y,Z]=meshgrid(*,*,*);I1=(*.^2+9/4*Y.^2+Z.^2-1).^3-*.^2.*Z.^3-9/80*Y.^2.*Z.^3;p=patch(isosurface(*,Y,Z,I1,0));set(p,'FaceColor','red','EdgeColor','none');view(3);a*isequal;a*isoff;light('Posi',[0-23]);
%在(0,-2,3)点处建立一个光源lightingphongset(gca,'ne*tplot','replacechildren');%记录电影**=get(p,'*Data');YY=get(p,'YData');ZZ=get(p,'ZData');forj=1:20
bili=sin(pi*j/20);
set(p,'*Data',bili***,'YData',bili*YY,'ZData',bili*ZZ)
F(j)=getframe;end%放映10次movie(F,10)1.2擦除动画帖子地址:.matlabsky./thread-240-1-1.html画在图形窗口中按照一定的算法连续擦除和重绘图形对象,表现为动画,这个也是MATLAB中使用最多的方法。使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对象进展了擦除处理。MATLAB中,创立擦除重绘动画的过程分为以下三步:step1:设置重绘对象的擦除模式'EraseMode'模式Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过没置"EraseMode〞属性来完成的,一共有三种擦除模式:none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程background:在重新绘制图形对象之前。用背风光重绘对象来到达擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形*or:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果step2:在循环语句中使用set更改图形的*data,ydata和zdata等坐标数据step3:使用darwnow命令刷新屏幕该方法的经典格式是:%擦除重绘模式动画%选择一个擦除模式set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创立%%需要执行一些图形计算命令%%循环语句中更新坐标数据,一般使用for或者whilefori=1:n
%
%必要的MATLAB命令
%
set(h,'*data',*data,'ydta',ydata)%更新图像的坐标数据
drownnow%刷新屏幕
%
%其它Matlab语句
%end
Matlab擦除重绘动画实例(一)——运动的小球functionf=anim_ball(K,ki)%%演示红色小球沿一条封闭旋螺线运动的实时动画%仅演示实时动画的调用格式为anim_ball(K)%既演示实时动画又拍摄照片的调用格式为f=anim_ball(K,ki)%K红球运动的循环数〔不小于1〕%ki指定拍摄照片的瞬间,取1到1034间的任意整数%f存储拍摄的照片数据,可用image(f.cdata)观察照片%产生封闭的运动轨线%%%bydynamic%allrightsreservedby.4math.%t1=(0:1000)/1000*10*pi;*1=cos(t1);y1=sin(t1);z1=-t1;t2=(0:10)/10;*2=*1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(*2));t3=t2;z3=(1-t3)*z1(end);*3=zeros(size(z3));y3=*3;t4=t2;*4=t4;y4=zeros(size(*4));z4=y4;*=[*1*2*3*4];y=[y1y2y3y4];z=[z1z2z3z4];h=figure('numbertitle','off','name','擦除动画演示(运动的小球)——Matlabsky')plot3(*,y,z,'b')a*isoff
%绘制红点%擦除模式设为*orh=line('Color',[100],'Marker','.','MarkerSize',40,'EraseMode','*or');n=length(*);i=1;j=1;%循环改变坐标,表现为小球运动while1
if~ishandle(h),return,end
set(h,'*data',*(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
endend
Matlab擦除重绘动画实例(二)——单摆横梁%挂摆横梁%bydynamic%seealso.matlabsky.%h=figure('numbertitle','off','name','擦除动画演示(挂摆横梁)——Matlabsky')%绘制横梁plot([-0.2;0.2],[0;0],'-k','linewidth',20);%画初始位置的单摆g=0.98;%重力加速度,可以调节摆的摆速l=1;%摆长theta0=pi/4;%初始角度*0=l*sin(theta0);%初始*坐标y0=-l*cos(theta0);%初始y坐标a*is([-0.75,0.75,-1.25,0]);a*isoff%创立摆锤%擦除模式为*orhead=line(*0,y0,'color','r','linestyle','.','erasemode','*or','markersize',40);%创立摆杆body=line([0;*0],[-0.05;y0],'color','b','linestyle','-','erasemode','*or');%摆的运动t=0;%时间变量dt=0.01;%时间增量while1
t=t+dt;
theta=theta0*cos(sqrt(g/l)*t);%单摆角度与时间的关系
*=l*sin(theta);
y=-l*cos(theta);
if~ishandle(h),return,end
set(head,'*data',*,'ydata',y);%改变擦除对象的坐标数据
set(body,'*data',[0;*],'ydata',[-0.05;y]);
drawnow;%刷新屏幕end
Matlab擦除重绘动画实例(三)——时钟演示%将以下命令保存到M文件中,直接运行%Matlab时钟动画演示%rewritebydynamic%moreinformationpleasegoto.matlabsky.trycloseallhfig=figure('NumberTitle','off','name',...'ClockAnimationDemo--byMatlabSky','MenuBar','none');theta=linspace(0,6.3,1000);*1=8*cos(theta);y1=8*sin(theta);plot(*1,y1,'b','linewidth',1.4)%绘制外表盘holdona*isequal*2=7*cos(theta);y2=7*sin(theta);plot(*2,y2,'y','linewidth',3.5)%绘制内表盘fill(0.4*cos(theta),0.4*sin(theta),'r');%绘制指针转轴a*isoffa*is([-1010-1010])set(gca,'position',[[0.130.050.7750.815]])title(date,'fontsize',18)fork=1:12;*k=9*cos(-2*pi/12*k+pi/2);yk=9*sin(-2*pi/12*k+pi/2);plot([*k/9*8*k/9*7],[yk/9*8yk/9*7],'color',[0.30.80.9]);te*t(*k,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;*h3=4.0*cos(th);yh3=4.0*sin(th);*h2=*h3/2+0.5*cos(th-pi/2);yh2=yh3/2+0.5*sin(th-pi/2);*h4=*h3/2-0.5*cos(th-pi/2);yh4=yh3/2-0.5*sin(th-pi/2);hh=fill([0*h2*h3*h40],[0yh2yh3yh40],[0.60.50.3]);%计算分针位置tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;*m3=6.0*cos(tm);ym3=6.0*sin(tm);*m2=*m3/2+0.5*cos(tm-pi/2);ym2=ym3/2+0.5*sin(tm-pi/2);*m4=*m3/2-0.5*cos(tm-pi/2);ym4=ym3/2-0.5*sin(tm-pi/2);hm=fill([0*m2*m3*m40],[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;*h3=4.0*cos(th);yh3=4.0*sin(th);*h2=*h3/2+0.5*cos(th-pi/2);yh2=yh3/2+0.5*sin(th-pi/2);*h4=*h3/2-0.5*cos(th-pi/2);yh4=yh3/2-0.5*sin(th-pi/2);set(hh,'*Data',[0*h2*h3*h40],'YData',[0yh2yh3yh40])%计算分针位置tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;*m3=6.0*cos(tm);ym3=6.0*sin(tm);*m2=*m3/2+0.5*cos(tm-pi/2);ym2=ym3/2+0.5*sin(tm-pi/2);*m4=*m3/2-0.5*cos(tm-pi/2);ym4=ym3/2-0.5*sin(tm-pi/2);set(hm,'*Data',[0*m2*m3*m40],'YData',[0ym2ym3ym40])%计算秒针位置ts=-(ti(6))/60*2*pi+pi/2;set(hs,'*Data',[07*cos(ts)],'YData',[07*sin(ts)])drawnow;pause(0.09)endcatch['MatlabSky--打造最优、专业和权威的Matlab技术交流平台!更多信息参见:'...'<ahref="matlab:web.matlabsky.">.matlabsky.</a>']returnend
Matlab擦除重绘动画实例(四)——小球绕跑道运动%小球绕跑道运动%rewritebydynamic%moreinformationpleasegoto.matlabsky.%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
a*is([0,2*r+L,0,2*r])
o*1=r;oy1=r;o*2=r+L;oy2=r;
*1=r:0.015*v:r+L;
y1=2*r*ones(size(*1));
thita=0:0.015*v/r:pi;
*2=sin(thita)*r+o*2;y2=cos(thita)*r+oy2;*3=r+L:-0.015*v:r;
y3=zeros(size(*3));*4=-sin(thita)*r+o*1;
y4=-cos(thita)*r+oy1;
*=[*1*2*3*4];
y=[y1y2y3y4];
plot(*,y);
te*t(0,-2,['长度L='num2str(L)','...
'半径r='num2str(r)',''速度v='num2str(v)]);a*isequal
set(gca,'Visible','off')
hm=line(r,2*r,'color','red','marker','.','markersize',37,'erasemode','*or');
while1
fori=1:length(*)
try
set(hm,'*data',*(i),'ydata',y(i));
pause(0.0003)
drawnow
catch
['MatlabSky--打造最优、专业和权威的Matlab技术交流平台!'...
'更多信息参见:<ahref="matlab:web'...
'.matlabsky.">.matlabsky.</a>']
return
end
end
endend1.3质点动画帖子地址:.matlabsky./thread-594-1-1.html用et()等函数绘制彗星图,它能演示一个质点的运动。质点运动轨迹动画方式是最简单的动画产生方式,顾名思义,就是产生一个顺着曲线轨迹运动的质点来操作。Matlab中提供了et和et3命令来实现质点运动轨迹动画的绘制,其常用格式为:et(*data,ydata,p)
%p是指彗星的尾巴的长度,可以是常数或者size(*)大小的向量其他具体格式大家可以参考docet帮助系统该方法的使用一般使用步骤如下:step1:求解出质点完整的运动轨迹坐标*,y和zstep2:使用et或者et3直接绘制动点质点动画演示(一)%bydynamic%seealso.matlabsky.%t=0:pi/50:10*pi;*=30*sin(t);y=30*cos(t);z=t;plot3(*,y,z);holdon%a*isequalet3(*,y,z,0.5)质点动画演示(二)——平抛运动%bydynamic%seealso.matlabsky.%v*=40;t=0:0.01:10;*=v**t;y=-9.8*t.^2/2;et(*,y)质点动画演示(三)——导弹发射%bydynamic%seealso.matlabsky.%v*=100*cos(1/4*pi);vy=100*sin(1/4*pi);t=0:0.001:15;*=v**t;y=vy*t-9.8*t.^2/2;et(*,y)1.4霓虹灯效果动画帖子地址:.matlabsky./thread-9255-1-1.html如今繁华大都市的夜色中,霓虹闪烁,煞是好看,调用MATLAB中的spinmap函数可以做出这种效果的动画,它是通过旋转颜色映像的方式来呈现这种霓虹闪烁的动画效果。spinmap函数的调用格式如下:spinmap
%旋转颜色映像约5秒钟spinmap(t)
%旋转颜色映像约t秒钟,具体时间取决于硬件spinmap(t,inc)
%旋转颜色映像约t秒钟,并设置增量参数inc,该参数用来调整闪烁频率spinmap('inf')
%不限时旋转颜色映像,假设需终止,请按Ctrl+C键霓虹灯效果动画实例〔一〕——霓虹闪烁的球体%by*iezhhsphere;
%绘制单位球面a*isequal;
%设置坐标显示比例一样a*isoff;
%隐藏坐标轴spinmap(20,1);
%设置增量参数为1,旋转颜色映像约20秒霓虹灯效果动画实例〔二〕——一颗花心帖子地址:.matlabsky./viewthread.php"tid=9489%byqibb**tclear;clc;closeallc=5;t=linspace(-c,c);[*,y]=meshgrid(t);z=17**.^2-16*abs(*).*y+17*y.^2-225;pcolor(*,y,z);shadinginterppause(2);spinmap(10)1.5GIF格式动画制作帖子地址:.matlabsky./thread-9236-1-2.htmlGIF格式动画以其小巧受到大家的广泛欢送,本贴以案例形式做一个总结。制作GIF动画要用到getframe、frame2im、rgb2ind和imwrite函数,getframe函数用来抓取当前图形窗口中的图像,frame2im函数和rgb2ind函数用来将抓取的图像转为索引图像,imwrite函数用来将索引图像写入GIF格式动画,需要注意的是imwrite函数不能将真彩图像写入GIF格式动画。关于这些函数的具体用法,这里不再详述,请版友自行查阅帮助。下面只给出案例。
GIF格式动画制作案例——绕螺旋线运动的小球%by*iezhhfilename='*iezhh.gif';z=linspace(0,10*pi,100);
%产生一个行向量*=[20*sin(z),zeros(1,10)];y=[20*cos(z),20*ones(1,10)];z=[z,linspace(10*pi,0,10)];plot3(*,y,z,'r','linewidth',2);
%绘制螺旋线holdon
%图形保持h=plot3(0,20,0,'.','MarkerSize',40,'EraseMode','*or');*label('*');ylabel('Y');zlabel('Z');
%添加坐标轴标签a*is([-2525-2525040]);
%设置坐标轴范围view(-210,30);
%设置视角fori=1:length(*)
set(h,'*data',*(i),'ydata',y(i),'zdata',z(i));
drawnow;%刷新屏幕pause(0.05)
f=getframe(gcf);
imind=frame2im(f);[imind,cm]=rgb2ind(imind,256);
ifi==1imwrite(imind,cm,filename,'gif','Loopcount',inf,'DelayTime',0.1);
else
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);
endend2动画的保存帖子地址:.matlabsky./thread-595-1-1.html下面再讲述下生成的动画如何保存。动画保存,只有对电影动画而言才有意义,其他两种谈不上保存,因为他们都是实时的,眨眼就过的。而电影动画是先将动画一帧一帧的保存下来,在使用movie函数播放。它的好处是,运行一次MATLAB程序就可以播放无数次,只要你的帧数据还在。但是这还是不方便,由于它没法脱离MATLAB环境,很讨厌。还好MATLAB为我们提供了movie2avi函数,它可以把动画直接转换成avi文件,而avi文件则可以脱离Matalb环境而在其他地方运行了。请教如何保存matlab的动画?前几天刚辩论完,给你贴上。functionavimakewarningoff;loaddata[M,N,K]=size(data);data=data/(ma*(abs(data(:))));aviobj=avifile('mymovie.avi','fps',10);forkk=1:10:K
imagesc(data(:,:,kk));
set(gca,'clim',[-11]);
colormap(hsv(128))
frame=getframe(gca);
aviobj=addframe(aviobj,frame);endaviobj=close(aviobj);直接保存gif动画m(:,k)=getframe;%%%构造gif图像的帧,nn(:,:,:)=getframe;%%转换为可以直接输出的格式(这会是图像丧失)%如果要制作彩色的图像,你只能把生成的彩色图像单独制作(使用其他软件)nn1=nn.cdata;nn1=rgb2gray(nn1);imwrite(nn1,'out.gif','gif','WriteMode','append')3有关动画制作的实验报告帖子地址:.matlabsky./thread-600-1-1.html设计题目:三维与抛物动画仿真姓名:
**:
院系:
专业:
指导教师:
一.课程设计目的:
1.熟悉课程设计的根本流程;
2:掌握MATLAB语法构造及调试方法;
3:熟悉MATLAB函数调用,熟练二维画图;
4:掌握MATLAB语言在控制方面的运用;
5:学会用MATLAB进展根本仿真;
6:掌握MATLAB编程技巧,提高编程水平。二.系统分析与设计该动画仿真开场时是一个三维动画旋转13次,旋转完后将出现另一个窗口继续进展抛物线旋转动画。抛物线旋转26次后完毕旋转,此时动画完毕,最后关闭动画窗口,返回MATLAB语言环境。设计要求:第一个动画是三维图形在空中旋转,第二个是抛物线按照一定的规则旋转,旋转出一个有形的三维空间多边形。此MATLAB动画有两个小动画组成,总体为自动弹出式,即,第一个三维动画完毕,自动弹出第二个窗口实现抛物线旋转动画。第一个三维动画运用figure命令创立图形窗口,创立帧矩阵,填充颜色。用movie命令控制转动次数。第二个动画同样运用figure命令创立一个信的窗口,当第一个动画完毕自动由figure命令弹出第二个窗口运行动画。主要是画出三维空间曲线,利用语句控制其旋转方式,并用语句控制旋转次数,由pause控制每次旋转所停顿的时间,最后旋转出所设计的空间图形。MATLAB动画源程序清单:%Animation:rotatepeak%bydynamic%seealso.matlabsky.%figure('name','三维动画旋转的山峰——Matlabsky');%绘制三维曲面[*,Y,Z]=peaks(14);surfl(*,Y,Z);
a*is([-44-44-1111]);
%建立坐标系a*isoff;
%去除三维网格线shadinginterp;colormapspring;m=moviein(13);
%创立帧矩阵mfori=1:12
%命令生成图形
view(-37.5+30*(i-1),25);
m(:,i)=getframe;
%捕获动画帧endmovie(m);
%回放动画%Animation:rotateparaboloid%bydynamic%seealso.matlabsky.%h0=figure('name','三维动画旋转抛物面——Matlabsky');
a*is([-510-510-1080])
%建立坐标系holdon
%保持当前图形的所有特性%定义三组坐标曲线a=0:0.5:10;b=zeros(size(a));c=a.^2;
theta=pi/20;**=a;
%设置三维长轴坐标数据yy=b;
%设置三维宽轴坐标数据zz=c;
%设置三维高度数据%画旋转抛物面fori=1:40
M=[tan(i*theta)cos(i*theta)0;-cos(i*theta)sin(i*theta)0;001];
temp=M*[a;b;c];
**(i+1,:)=temp(1,:);yy(i+1,:)=temp(2,:);zz(i+1,:)=temp(3,:);
mesh(**,zz,yy);
%绘制三维网格曲面
a*isoff
%去掉三维网格线
pause(0.1)
%每次旋转停顿0.1秒
ifi==26
%设置旋转次数
break
endend三.系统调试过程中出现的主要问题:
1:程序程序出错,常会出现未定义变量:Error:Missingvariableorfunction.使用非英文符号时有Error:"EndofInput"e*pected,":"found.
2:路径出现错误,会出现程序无相应
3:程序运行时,不能显示出动画图形,只有三维坐标
4:运行一个动画后,不能弹出第二个窗口运行动画
5:没有规定运行次数,会出现不断旋转,无法停顿
6:语句运用错误,运行的动画与理论不符
7:常常出现函数调用错误
8:不能熟悉及正确使用各种语句
9:没有掌握matlab语句用法,编程时出现很多的用法及运用的错误四.系统运行报告与结论:此动画仿真是由两个单独的动画经过修改后组成的,并在两个不同的窗口依次运行动画。经过调试,三维图形转动,没有出现语法错误,而且符合设计要求。抛物线旋转动画中,运用figure语句创立新的窗口,由抛物线按要求旋转,最后转出实际要求的三维空间图形。两幅图形都准确显示,整个程序运行正常。开场设计时,是想做出有规则的动画,第二个开场想的是最后旋转出有规则的三维图形。但由于学会的知识太少,不能实现。五.总结:
Matlab语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,Matlab功能强大、简单易学、编程效率高;MATLAB语言不同于其他计算机语言,它是一种解释语言,即解释一条就执行一条!而且严格的区分中英文!所以,在编制程序时必须细心!这使我们在编制程序的过程中对MATLAB有了一个深层次的理解!
经过此次MATLAB课程设计,我学到了更多MATLAB的知识。为了完美的完成这次课程设计,查阅资料看了很多MATLAB语言的运用方法,也查阅了很多关于MATLAB的书籍,同时我也掌握了很多新知识,特别是了解了许多MATLAB函数。在设计过程中,我也碰到了许多问题,走了很多弯路,主要是因为对MATLAB还较不熟练,犯了一些常规错误,但最后通我查阅相关书籍和请教同学,问题都解决了。在解决问题过程中,学会了很多MATLAB的知识,最重要的是学会了自己解决问题的能力,知道怎么去处理发生的错误。总之,通过MATLAB课程设计,我熟悉了课程设计的流程,掌握了MATLAB语言的根本语句,学会了独立思考和查阅资料解决问题的能力!六.致谢:在这里,多谢教师为我们给我们讲解知识,并且给了我们这次自己动手做动画的时机,使我发现了做动画的乐趣,从而促使我更进一步的学习MATLAB语言,并将知识应用与实际问题的解决!增添了生活的丰富。特别感谢Matlabsky联盟的【MATLAB动画制作、实现和保存】教程的详细讲解。七.参考资料:1.*平编著"MATLAB根底与应用"2.杨杰,阙大顺编著:"Matlab语言根底及使用入门"3.Matlabsky技术论坛,.matlabsky.4更多动画实例帖子地址:.matlabsky./thread-596-1-1.html更多的MATLAB实例等着大家自己去开发,我们这里提供了一些,大家可以依葫芦画瓢一样学习下,希望起一个抛砖引玉的作用在本帖中我们提供了如下MATLAB动画实例:电影动画、擦除动画和质点动画。4.1
电影动画演示——旋转的山峰%bydynamic%seealso.matlabsky.%figure('toolbar','none','NumberTitle','off','name',...'电影动画(RotatePeak)——Matlabsky');[*,Y,Z]=peaks(30);surfl(*,Y,Z);a*is([-33-33-1010]);a*isoff;shadinginterp;colormaphot;m=moviein(15);fori=1:15view(-37.5+24*(i-1),30);m(:,i)=getframe;endmovie(m);4.2
擦除动画实例——卫星绕地球运动(注释很详细)%bydynamic%seealso.matlabsky.%h=figure('numbertitle','off','name','卫星绕地球旋转演示动画——Matlabsky');%设置标题名字s1=0:.01:2*pi;holdon;a*isequal;%建立坐标系a*isoff;%除掉A*esr1=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);te*t(-17,18,'太阳');%对太阳进展标识plot(-20,16,'color','b','marker','.','markersize',20);te*t(-17,16,'地球');%对地球进展标识plot(-20,14,'color','w','marker','.','markersize',13);te*t(-17,14,'卫星');%对卫星进展标识plot(0,0,'color','r','marker','.','markersize',60);%画太阳plot(r1*cos(s1),r1*sin(s1));%画地球公转轨道set(gca,'*lim',[-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));%画卫星绕地球的公转轨道p2*=r1*cos(sita1)+r2*cos(sita2);p2y=r1*sin(sita1)+r2*sin(sita2);p2=plot(p2*,p2y,'w','marker','.','markersize',20);%画卫星的初始位置orbit=line('*data',p2*,'ydata',p2y,'color','r');%画卫星的运动轨迹while1
if~ishandle(h),return,end
set(p1,'*data',r1*cos(sita1),'ydata',r1*sin(sita1));%设置地球的运动过程
%设置卫星绕地球的公转轨道的运动过程set(l1,'*data',r1*cos(sita1)+r2*cos(s1),'ydata',r1*sin(sita1)+r2*sin(s1));
ptemp*=r1*cos(sita1)+r2*cos(sita2);
ptempy=r1*sin(sita1)+r2*sin(sita2);
set(p2,'*data',ptemp*,'ydata',ptempy);%设置卫星的运动过程
p2*=[p2*ptemp*];
p2y=[p2yptempy];
set(orbit,'*data',p2*,'ydata',p2y);%设置卫星运动轨迹的显示过程
sita1=sita1+w1*pausetime;%地球相对太阳球转过的角度
sita2=sita2+w2*pausetime;%卫星相对地球转过的角度
pause(pausetime);%视觉暂停
drawnow%刷新屏幕,重绘end4.3
擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画(注释很详细)%bydynamic%seealso.matlabsky.%clear;clc;closeall%定义几组变量.分别代表的含义是:%相对圆心坐标半径最近距离最远距离周期角速度旋转角度*0=0;y0=0;r0=80;Lmin0=0;
Lma*0=0;
T0=2160;
w0=0*pi/T0;q0=0;*1=0;y1=0;r1=40;Lmin1=25;Lma*1=30;T1=1080;
w1=pi/T1;
q1=0;*2=0;y2=0;r2=20;Lmin2=8;
Lma*2=10;T2=180;
w2=pi/T2;
q2=0;*3=0;y3=0;r3=10;Lmin3=3;
Lma*3=05;T3=30;
w3=pi/T3;
q3=0;%初始化hh=figure('numbertitle','off','name',...'太阳|地球|月亮|卫星,绕转演示动画——Matlabsky');%设置擦除方式sun=line(0,0,'color','r','linestyle','.','erasemode',...'*or','markersize',r0);%太阳earth=line(*0,y0,'color','k','linestyle','.','erasemode',...'*or','markersize',r1);%地球moon=line(*1,y1,'color','b','linestyle','.','erasemode','*or',...'markersize',r2);%月亮satellite=line(*2,y2,'color','g','linestyle','.','erasemode',...'norm','markersize',r3);%卫星%添加标注a*isofftitle('太阳|地球|月亮|卫星',...'fontname','宋体','fontsize',9,'FontWeight','demi','Color','black');te*t(-20,50,'——更多精彩参见.matlabsky.');te*t(-50,50,'太阳');
%对太阳进展标识line(-55,50,'color','r','marker','.','markersize',80);te*t(-50,40,'地球');
%对地球进展标识line(-55,40,'color','k','marker','.','markersize',40);te*t(-50,30,'月亮');
%对月亮进展标识line(-55,30,'color','b','marker','.','markersize',20);te*t(-50,20,'卫星');
%对卫星进展标识line(-55,20,'color','g','marker','.','markersize',10);%绘制轨道s1=[0:.01:2*pi];line(Lma*1*cos(s1),Lmin1*sin(s1),'linestyle',':');%画地球的轨迹,是个椭圆a*is([-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
%到了一个周期就重置
%设置太阳圆心的坐标(在这个程序里,太阳圆心的坐标是不变的,所以可以省略)*0=Lma*0*cos(q1);y1=Lmin0*sin(q1);
*1=*0+Lma*1*cos(q1);y1=y0+Lmin1*sin(q1);%设置地球圆心的坐标
*2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- sap考试试题及答案
- 电网基础知识培训课程课件
- 电缆颗粒生产基础知识培训课件
- 三洲田道路施工方案
- 安徽省亳州市蒙城县涡南片区联考2022-2023学年九年级上学期期中化学试题(含答案)
- 电站电工知识培训内容课件
- 电磁炉介绍与使用
- 北师大六上期中考试卷及答案
- 北京地理模拟中考试卷及答案
- 3-8-Diamino-6-phenylphenanthridine-生命科学试剂-MCE
- 揭阳220千伏俊帆输变电工程环境影响报告表
- 东风汽车公司企业转型第二阶段实施计划
- 机器学习及应用PPT完整全套教学课件
- 事业单位工作人员转正定级审批表
- 医疗护理创新大赛PPT
- 组织供应、运输、售后服务方案-
- 项目1 Windows Server 安装与基本配置
- 房地产 -衢州市城市环境无障碍设计导则城市街区
- 一年级新生报名登记表
- 校园文化建设总体目标和规划
- 《体育游戏》课程标准
评论
0/150
提交评论