使用matlab制作动画

转自http://blog.sciencenet.cn/blog-412191-598966.html

制作PPT时经常需要使用一些动画,尤其是将程序的运行结果动态地表现出来,下面提供三种方法。
1.使用comet、comet3函数
comet与comet3函数其实反映的是运动轨迹图,comet3是三维图形。
example for comet:
clear all
clc
theta=0:2*pi/100:2*pi;
r=10;
x=r*cos(theta);
y=r*sin(theta);
comet(x,y)
example for comet3:
clear all
clc
t=-10*pi:pi/250:10*pi;
comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);
2.使用drawnow命令
example for drawnow:
clear all
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
for jj=1:length(x)
  set(h,'xdata',x(jj),'ydata',y(jj));
    axis(axesValue);
    drawnow
    pause(0.1)
end
3.使用movie函数
严格来讲,movie函数才是真正地制作动画,他其实是将每幀图片保存下来,然后再进行播放。
example for movie:
clear all
clc
clear all
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
A(1:length(x))=struct('cdata',[],'colormap',[]);
for jj=1:length(x)
    set(h,'xdata',x(jj),'ydata',y(jj));
    axis(axesValue);
    drawnow
    A(jj)=getframe;
end
movie(A,1)
这样产生的动画只能在matlab中播放,为了生成能够在PPT中支持的格式,我们可将他转换为avi。
clear all
clc
clear all
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
A(1:length(x))=struct('cdata',[],'colormap',[]);
for jj=1:length(x)
    set(h,'xdata',x(jj),'ydata',y(jj));
    axis(axesValue);
    drawnow
    A(jj)=getframe;
end
movie2avi(A,'ex_movie2avi','compression','none')
以上生成的avi格式视频是没有经过压缩的,往往比较大,可根据实际需要选取合适的压缩方法。
4.产生gif格式的图片
以上三种方法都有局限性,即使是第三种转换为avi格式,在放映PPT时如果播放avi格式,会弹出警告,为了避免这种问题,最好使用图片格式插入,而目前最常见的动画图片格式就是gif,为此下面介绍如果利用matlab来生成gif格式的图片。
example:
clear all
clc
clear all
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
A(1:length(x))=struct('cdata',[],'colormap',[]);
for jj=1:length(x)
    set(h,'xdata',x(jj),'ydata',y(jj));
    axis(axesValue);
    drawnow
    f=getframe;
    f=frame2im(f);
    [X,map]=rgb2ind(f,256);
    if mod(jj,10)==1
        if jj==1
            imwrite(X,map,'ex_imwrite.gif');
        else
            imwrite(X,map,'ex_imwrite.gif','WriteMode','Append');
        end
    end
end
主要上面对imwrite的使用,只有将'WriteMode'设置为'Append'才可以制作为动画。
参考文献
1.matlab的help文档
2.《matlab N个实用技巧》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值