4.8动画
4.8.1以电影方式产生动画
以电影方式产生动画,有两个步骤:
(1) 使用getframe命令来抓取图形作为画面,每个画面都是以一个列向量的方式,置于存放整个电影的矩阵M中。
(2) 使用movie(M,k)命令来播放电影,并可指定矩阵M播放的重复次数k。
【例4.33】使用电影方式制作动画,显示二阶系统的时域波形,最后一个画面如图4.54所示。
n=20;
for i=1:n x=0:0.1:i;
y=1-1/sqrt(1-0.3^2)*exp(-0.3*x).*sin(sqrt(1-0.3^2)*x+acos(0.3)); plot(x,y)
axis([0,20,0,1.5]); %固定坐标轴 M(i)=getframe; %抓取画面 end
movie(M,3) %播放3次
程序分析:使用for循环,画20个不同阶段的波形画面,将画面抓取保存到M矩阵中,播放3次。
图4.54 最后一帧画面
4.8.2以对象方式产生动画
1.擦除属性EraseMode
以对象方式产生动画需要设置EraseMode属性,EraseMode为一个字符串,代表对象的擦除方式,即对于旧对象的处理方式。EraseMode属性有以下几种:
? normal:计算整个画面的数据,重画整个图形。
? xor:将旧对象的点以xor的方式还原,即只画与屏幕色不一致的新对象点,擦除不一致的原对象点,这种方式不会擦除被擦对象下面的其他图像。
? background:将旧对象的点变成背景颜色,实现擦除,这种方式会擦除被擦对象下面的其他图像。
? none:保留旧对象的点,不做任何擦除。 在上述四种EraseMode中,耗费时间的次序是: normal > xor > background > none
2.对象的位置属性
通常在动画过程中,会改变对象的位置或尺寸、颜色等外观属性,位置属性有: ? xdata:为一个向量,代表对象的x坐标值。 ? ydata:为一个向量,代表对象的y坐标值。
3.屏幕刷新
当新对象的属性设置后,应刷新屏幕,使新对象显示出来,刷新屏幕用drawnow命令实现。
4.产生动画
产生动画的具体步骤是:
(1) 先产生一个对象,其EraseMode属性为xor、background或none; (2) 在循环中产生动画,每次循环改变此对象的xdata或ydata(或两者); (3) 使用drawnow命令刷新屏幕
【例4.34】使用对象方式产生用一个红色的小球沿着曲线运动的动画,如图4.55所示。
图4.55 运行界面
x=0:0.1:20;
y=1-1/sqrt(1-0.3^2)*exp(-0.3*x).*sin(sqrt(1-0.3^2)*x+acos(0.3)); plot(x,y)
h=line(0,0,'color','red','marker','.','markersize',40,'erasemode','xor'); %定义红色的小球
for i=1:length(x)
set(h,'xdata',x(i),'ydata',y(i)); %设置小球的新位置 pause(0.005) %暂停0.005秒 drawnow %刷新屏幕 end
程序分析:小球以xor的方式擦除旧曲线,如果将EraseMode改成background方式,则会发现小球会擦掉原来的曲线;drawnow命令的作用是使MATLAB立刻处理set命令,但由于本例中使用pause命令暂停,屏幕一定会得到及时的更新,drawnow如果去掉效果一样。
相关推荐: