登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

电子信息学习 资料共享

 
 
 

日志

 
 

自控系统仿真软件课程设计报告  

2009-07-15 15:26:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

----------------封面--------------------------------

自控系统仿真软件课程设计报告

设计题目:模拟导弹打卫星过程 

 

 


   名: ch
   号:060408220
   系:电气信息工程系
   级:电子信息工程061
指导教师:ch

 


二零零九年六月一日

 

 

 

 

 

 

 

 

 

 

 

 

 

------------------------------------正文---------------------------------  

摘要
    本程序动画设计作品,是使用MATLAB语言进行导弹打卫星二维和三维空间过程的仿真,动画形象生动,能够简明直观地展现导弹打卫星实现的原理和过程。
    本动画的主要内容是先画导弹打卫星的二维的过程,比较形象和鲜明地展现了二维导弹打卫星的动画。首先卫星围绕地球旋转,同时地球上扫描卫星位置,并发射导弹,在卫星运行3/4周期后与导弹相撞,之后结束二维画图,进行三维画图。三维比二维更加形象和鲜明展现导弹打卫星的过程。三维导弹打卫星实现过程与二维基本相同,不过更加具有立体感,在卫星运行3/4周期后与导弹相撞,之后结束三维画图。为了更加体现三维画图的视觉优势,在结束三维动画后,将三维视图自动以不同的角度展现给观众。之后,整个动画结束。

关键词:模拟导弹打卫星过程 导弹打卫星   仿真软件 程序动画 MATLAB 

一.         课程设计目的

1、熟悉课程设计的基本流程;
   2、掌握MATLAB语法结构及调试方法;
   3、熟悉MATLAB函数调用,熟练二维画图;
   4、掌握MATLAB语言在控制方面的运用;
   5、学会用MATLAB进行基本仿真;
   6、掌握MATLAB编程技巧,提高编程水平。

.系统分析
   1.
题目的描述:
  1)运行程序时,先画二维导弹打卫星动画

  2)当二维画完后接着画三维图,三维图画法与二维不同,画图形和动画实现基本上不同,基本画图要用mesh,surf,plot3,fill3来实现。
  3)随后的过程如下:
        三维画图中,卫星在地球最上方,此时导弹发射,在3/4周期后射中目标,之后,以不同的角度观察爆炸后的场景
   2.设计要求:
  1)要实现二维与三维动画

  2)要尽量客观和真实的模拟导弹打卫星原理和过程。

三.系统设计:
   1.系统总体设计:
    1)画出系统的各个元素:在画运动的图时,先必须分别在二维和三维画出地球,导弹,卫星。当然,这些在运动前都是静的。
    2)之后先二维动画程序运行,结束后,三维动画开始运行。所有动画运行后结束,为了使观众对三维动画立体效果有更加了解,之后旋转一周,从各个角度对导弹打中卫星后的场景进行动画描述
   2.系统总体框架流程图:

 

%画二维导弹打卫星过程

figure('name','模拟导弹打卫星过程二维视图','Color','b');%定义题目

text(-90,200,'模拟导弹打卫星过程','fontsize',15,'color','r');

axis xy %定义笛卡尔坐标

axis off %除掉Axis

axis([-200,200,-200,200]);%定义动画范围

axis square  %使坐标x,y轴单位长度相同

set (gcf,'doublebuffer','on');%消除振动

hold on;%保持当前图形及轴系所有的特性

%画地球

jiao=0:0.01:2*pi;

x=100*sin(jiao);

y=100*cos(jiao);

head=fill(x,y,'y')

%画导弹

xd=10*cos(jiao)+110

yd=10*sin(jiao)

dq=fill(xd,yd,'k')

%画卫星

x0=15*sin(jiao)

y0=15*cos(jiao)+150

qiu=fill(x0,y0,'r')

%设置卫星及导弹运动轨迹

dt=2*pi/100 %运动间隔时间

j1=0%初始化参数

n1=0%初始化参数

time=0 %初始化参数

pausetime4=.1;%设置停顿时间

while n1<=74 %利用循环来控制运行时间

    n1=n1+1

    j1=j1+dt

    time=time+pi/75

   set(qiu,'xdata',x0+150*cos(j1+0.5*pi),'ydata',y0+150*sin(j1+0.5*pi)-150) %设置卫星运动

%设置导弹运动运行过程

   if time<=pi%导弹运行时间设置

   set(dq,'xdata',xd+25*cos(time+pi)+25,'ydata',yd+25*sin(time+pi))

end %设置导弹运动

 pause(pausetime4)%停顿

end

delete(dq,qiu) %清除导弹和卫星,以便话爆炸后过程

%画爆炸后图像

t=0;

x=150

y=0

while t<5

t=t+1;

x1=x-(0.5+5*t);

x2=x-(0.2+2 *t);

x3=x-(0.6+6*t);

x4=x-(0.1+t);

x5=x;

x6=x+(0.05+0.5*t);

x7=x+(0.3+3*t);

x8=x+(0.2+2*t);

x9=x+(0.4+4*t);

x12=x+(0.1+t);

x10=x;

x11=x-(0.1+t);

 

y1=y+(0.1+t);

y2=y;

y3=y-(0.5+5*t);

y4=y-(0.2+2*t);

y5=y-(0.5+5*t);

y6=y-(0.3+3*t);

y7=y-(0.4+4*t);

y8=y;

y9=y+(0.1+t);

y12=y+(0.2+2*t);

y10=y+(0.5+5*t);

y11=y+(0.1+t);

fill([x1,x2,x3,x4,x5,x6,x7,x8,x9,x12,x10,x11],[y1,y2,y3,y4,y5,y6,y7,y8,y9,y12,y10,y11],'r');%连接各点

hold on;

 

end

text(160,15,'打到卫星了!!!','fontsize',15,'color','r');

pause(1)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%画三维导弹打卫星过程

figure('name','模拟三维导弹打卫星过程','Color','b'); %定义题目

axis xy %定义笛卡尔坐标

axis([-200,200,-200,200,-200,200]); %定义动画范围

clear

axis off;%清除坐标轴

u=-pi:pi/50:pi; %设置初始条件

v=-pi/2:pi/50:pi/2; %设置初始条件

r=100; %设置初始条件

[uu,vv]=meshgrid(u,v);%加上这一句 ,画圆函数

surf(r*sin(uu).*cos(vv),r*sin(uu).*sin(vv),r*cos(uu)) %最好用meshsurf而不是plot3,当然plot3也行,可以自己比较

%meshc(r*cos(uu).*cos(vv).*sin(vv));

grid on

text(0,0,180,'模拟导弹打卫星过程','fontsize',15,'color','r');

axis square %使坐标轴一致

hold on

%画地球导弹基地

fill3([0,0,10,10],[-100,-110,-110,-100,],[0,0,0,0],'m');

hold on

fill3([0,0,10,10],[-100,-110,-110,-100],[-10,-10,-10,-10],'m');

hold on;

fill3([0,0,0,0],[-100,-110,-110,-100],[0,0,-10,-10],'m');

hold on;

fill3([10,10,10,10],[-110,-110,-100,-100],[0,-10,-10,0],'m');

%画卫星

x1=0,y1=0,z1=0

[a,b,c]=sphere(20)

weixin=fill3(10*a+x1,10*b+y1,10*c+z1,'y')

grid on

%画导弹

daodan=fill3(5*a+5,5*b-105,5*c-5,'b') %画导弹初始化形状

dt=2*pi/100 %初始化参数

dt1=1.5*pi/100%初始化参数

t=0%初始化参数

t1=0%初始化参数

n=0%初始化参数

%设置三维运动过程

while n<=49%循环控制

    n=n+1

    t=t+2*dt

    t1=t1+2*dt1

%画三维卫星运动轨迹

y1=-150*cos(t1-1.5*pi)

z1=150*sin(t1-1.5*pi)

set(weixin,'xdata',10*a+x1,'ydata',10*b+y1,'zdata',10*c+z1)

hold on

%画三维导弹运动轨迹

h=log(1.5*t)

row=exp(h/2*pi)

y2=-row*cos(t)

z2=row*sin(t)

set(daodan,'xdata',5*a+5,'ydata',5*b-105+y2,'zdata',5*c-5+z2)

hold on

%以下几句可有可无,主要讲动画减慢播放

m=moviein(5)

for j=1:5

    m(:,j)=getframe

end

    movie(m)

set(gcf,'doublebuffer','on') %消除抖动

end

%以下主要将结束后图像依次旋转360

movie(m)

   for i=1:12      %命令生成图形

   view(-37.5+30*(i-1),25);

    m(:,i)=getframe;    %捕获动画帧

end

text(7,-160,0,'打到卫星了!!!','fontsize',15,'color','r');

%画爆炸后的图像

delete(weixin,daodan)

fill3([0,10,5],[-150,-125,-145],[0,-10,19],'m');

fill3([0,-4,7],[-150,-129,-135],[0,10,-9],'m');

fill3([0,20,9],[-150,-115,-165],[0,5,18],'m');

drawnow

 

 

 

 

四.系统调试过程中出现的主要问题:

1.首先,做二维动画时,没有现成的模板,画圆的运动不是像line语句来解决的(但也可直接用‘ 。’来画圆,本人觉得没有挑战)。

2.画好圆后,但不能使其运动。

3.好不容易使圆运动,但运动轨迹达不到预期要求。

4.运动后的轨迹没有随运动后及时擦除。

5.其次,在做三维动画时,由于没有现成的例程序,在网上只查到像plot,fill,set等函数的三维图形的调用方法,同时也发现了一些函数独特用法。

6.三维动画设计比较复杂,要考虑的多一个方面,设计程序时,运行的动画往往不在预定区域。

7.三维动画也像二维动画一样,在运动时,轨迹不能随时擦除

8. 将程序中的axis square改为axis equal后,画面非常好,但

程序无法终止,原因是出现死循环。

五.系统调试后的效果图:

 

 

 

 

1.二维导弹打卫星动画运行中场景

                               

 

 

 

 

 

 

 

 

 

 

 

2.二维导弹打卫星动画运行后场景

 

 

 

 

 

3.三维导弹打卫星动画运行开始场景

 

 

 

 

 

 

 

 

 

 4.三维导弹打卫星动画运行中场景

 

 

 

 

 

 

 

 

 

 

5.三维导弹打卫星动画运行后场景

 

 

 

 

六.系统运行报告与结论:

通过调试导弹打卫星,实现了导弹和卫星分别在二维和三维上运动

1.    运行轨迹在于其位置。

2.    运行后的轨迹能够自行擦除,达到系统要求。

3.    符合二维和三维动画的特点。

4.    所有过程顺利依次进行

5.     

七.作品中存在的不足

我感觉作品的效果不错,基本达到了课题的要求,但由于时间和能力所限,作品中还存在一点不足,主要是三维地球应该是圆的,但可能没能将坐标轴设置好,出现看着像瘪圆,其实是圆的情况。由于本人对matlab不太熟,无法解决此问题,恳请老师能够在百忙中得以解决。

八.总结

通过这次MATLAB的动画课程设计,让我学到了许多MATLAB的知识。让我了解了MATLAB语言有强大的数据处理功能,处理速度快,精度高,还有众多工具包,所以大规模用于控制领域,仿真领域,因此它有强大的生命力和广阔的发展前景;同时,MATLAB语言不同于其他计算机语言,它是一种解释语言,即解释一条就执行一条!而且严格的区分中英文!所以,在编制程序时要细心!这使我们在编制程序的过程中对MATLAB有了一个深层次的理解! 为了使这次动画设计的更加完美,花了一些时间去学习MATLAB,查阅了很多关于MATLAB的书籍,同时我也掌握了很多新知识,特别是了解了许多MATLAB函数。在设计过程中,我也碰到了许多问题,走了很多弯路,主要是因为对MATLAB还较不熟练,犯了一些常规错误,但最后通我查阅相关书籍和请教老师同学,问题都迎刃而解。在解决问题过程中,学会了很多MATLAB的知识,最重要的是学会了自己解决问题的能力,受益非浅。

.致谢
    首先在这里要感谢程老师!他精彩生动的授课风格,不拘一格、师生互动交流的教学方式,让我对编程,特别是matlab产生了浓厚的兴趣。他的博客《麓瑜园》更是别具一格,既有师生互动交流的平台,又有程老师丰富生活和人生阅历积淀而成的精美文章,同学们在这里可以轻松学习、文理兼收。

其次,特别感谢周明 等编著的《matlab 图形技术——绘图及图形用户接口》这本书,本次画三维动画的基础工作得益于此书。
     最后还要感谢matlab应用群的学长在这次课程设计中给予的函数及模板指点和帮助!

十.参考书目
1.张平编著《MATLAB基础与应用简明教程》北京航空航天大学出版社 2001.1

2. 周明 等编著《matlab 图形技术——绘图及图形用户接口》西北工业大学出版社1999.11

3. 李宜达 编著《动态模拟与绘图——使用matlab/simulink》中国台北:全华科技图书股份有限公司 1998.4

4. 吴敏?陈涛《在MATLAB 中实现动画效果》论文 广东海洋大学  2006

  评论这张
 
阅读(632)| 评论(2)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018