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

我的博客

电子信息学习 资料共享

 
 
 

日志

 
 

matlab程序动画  

2009-05-10 07:37:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

%画二维导弹打卫星过程

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)) %最好用mesh或surf而不是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

  评论这张
 
阅读(394)| 评论(1)

历史上的今天

评论

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

页脚

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