登录论坛

查看完整版本 : [分享][原创]动画震荡的小球(含MATLAB源码和注释)


pslpsl
2008-08-25, 20:43
function bai
%震荡的小球动画演示
%EDIT BY PSL@CSU
%QQ:547423688
%Email:[email protected]
clear
clc
savemov=1;%是否生成avi文件,1为是,0为否
if(savemov==1)
mov=avifile('bai.avi');
end
t=0:pi/18:4*pi;
n=length(t);
y=cos(t); %震荡轨迹,可改变函数
line1=plot(t,y,'b'); %绘制曲线
axis([0 4*pi -1.5 1.5]);
hold on;
title('震荡的小球动画演示(By pslpsl)');
%下面利用线绘制小球,并定义线的颜色,线形大小和擦除方式
%小球对象的句柄存放在变量h中,后面利用这个句柄对小球控制
h=line('color',[0 0.5 0.5],'linestyle','.','markersize',50,'erasemode','xor');
%最关键的一点把擦除方式设为'xor',这样才能实现好的动画效果
%下面为脚本文件
i=1;
k=1;%控制转向
count=1;
j=2;%震荡次数 j/2次
line2=plot(t(1),y(1),'r');%存放震荡线
while count<j*n-j+1
delete(line2);%或cla %删除震荡线
temp=rand(1)-0.5;%随机震荡
set(h,'xdata',t(i),'ydata',y(i)+temp);
line2=plot([t(i),t(i)],[y(i),y(i)+temp],'r');
pause(0.01);
%drawnow;%刷新
if(savemov==1)
f=getframe(gcf);
mov=addframe(mov,f);
end
i=i+k;
count=count+1;
%碰到反射点转向
if(i==1|i==n)
k=-k;
end
end
hold off;
if(savemov==1)
mov=close(mov);
end
%EDIT BY PSL@CSU
%QQ:547423688
%Email:[email protected]




动画效果如下:

1035

labfans
2008-08-25, 20:50
呵呵,pslpsl (http://www.labfans.com/member.php?u=19313)发帖,必属精品!

wwlaoxi
2010-07-13, 17:11
谢谢啦 啊:)正学这块的了