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

李小一的梦想世界

 
 
 

日志

 
 

Matlab产生动画的几种方式  

2008-05-16 14:18:42|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1 电影方式

用moviein() getframe() movie()来产生 首先划分一段内存,然后把每帧的数据存下来,然后播放出来

例:

axis equal
M=moviein(25);    %划出一块内存空间
for j=1:25
    plot(fft(eye(j+25)))
    axis equal
    axis([-1 1 -1 1])
    M(:,j)=getframe;%保存帧
end
clf;
axes('Position',[0 0 1 1]);
movie(M,10)        %播放10次
close

2 对象方式

利用matlab中“图形句柄”的概念

例:   小球沿螺旋线运动

K=N; %循环次数

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=[x1 x2 x3 x4];y=[y1 y2 y3 y4];z=[z1 z2 z3 z4];

plot3(x,y,z, 'b' ), axis off % 绘制曲线

% 定义 " 线 " 色、 " 点 " 型(点)、点的大小( 40 )、擦除方式( xor)

h=line( 'Color' ,[1 0 0], 'Marker' , '.' , 'MarkerSize' ,40, 'EraseMode' , 'xor' ); %这个函数很重要

% 使小球运动

n=length(x);

for j=1:K

    for i=1:n          

set(h, 'xdata' ,x(i), 'ydata' ,y(i), 'zdata' ,z(i)); % 小球位置

drawnow; % 刷新屏幕 <21>

pause(0.0005) % 控制球速 <22>

end

end 

例2:心形线 用对象方式显示

axis([-6 1 -4 4]);  %试出来的显示范围 否则坐标会乱变
a=0:0.01:2*pi;
b=3*(1-cos(a));
h=line( 'Color',[1 0 0],'Marker','.','MarkerSize',20,'EraseMode','none'); %里面的参数决定了刷新形式 还有运动点的大小等等
for i=1:length(a)
    set(h, 'xdata' ,cos(a(i))*b(i), 'ydata' ,sin(a(i))*b(i)); % 小球位置
    pause(0.01)
end

3 matlab本身的一些函数

comet()将一条曲线动态的画出

例:

%拍的形成动画演示,written by Luoyao,骆遥geophysics_21@163.com
t=0:0.001:4;           %t的间隔可以决定画图的快慢,相当于增加了数据量,处理起来就慢了
x1=cos(2*pi*5*t);
x2=cos(2*pi*5.5*t);

subplot(3,1,1)
comet(t,x1);
plot(t,x1);
grid on
title('Fig1.频率5Hz的简谐振动(初相0)');
xlabel('t(s)');
ylabel('振幅');

subplot(312)
comet(t,x2);
plot(t,x2);
grid on
title('Fig2.频率5.5Hz的简谐振动(初相0)')
xlabel('t(s)');
ylabel('振幅');

subplot(313)
comet(t,x1+x2);
plot(t,x1+x2);
grid on
title('Fig3.拍的形成f=f2-f1=0.5Hz');
xlabel('t(s)骆遥 绘制');
yla bel('振幅');

4 简单的类动画

利用pause()函数来延迟画点,达到一种动态的效果

例:  该例画出的线是一个一个点组成的,非连续。

t=linspace(0,2*pi,1000);
y=sin(t);
x=cos(t);
figure
plot(0,0);
xlim([0,2*pi]);
ylim([-1,1]);
for i=1:length(t)
    drawnow       %为了发出重画消息 可有可不有
    hold on;
    plot(t(i),y(i),t(i),x(i));
    pause(0.001); %决定动态时间
end

例2:心形线 

hold on
axis([-6 1 -4 4]);
b=3;
for a=0:0.01:2*pi
    hold on
polar(a,b*(1-cos(a)),'b');  %极坐标
pause(0.01)
end

  评论这张
 
阅读(186)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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