MATLAB制作长草颜团子动图

使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对象进行了擦除处理。

擦除模式是通过设置“EraseMode”属性来完成的,一共有三种擦除模式:

none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程。
background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形。
xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果。

擦除动画经典格式:

%% 擦除重绘模式动画
%文件夹名字
filename = '名字.gif';
%创建图形窗口并设置属性 
hFigure=figure('menubar','none','NumberTitle','off','position',[100 100 500 400],'name','团子','color',b0); 
movegui(hFigure,'center');%居中 
%创建坐标轴,用于显示背景图片和文本 
hAxes=axes('visible','off','units','normalized','position',[0 0 1 1]); 
%图形计算命令
h=plot()    
%选择一个擦除模式 
set(h,'erasemode',erasemode) %h是需要执行动画图像的句柄,一般都是由line或者plot创建 
%循环语句中更新坐标数据,一般使用for或者while  
for i=1:n
    %必要的MATLAB命令
    set(h,'xdata',xdata,'ydta',ydata) %更新图像的坐标数据
    %其它Matlab语句
    axis equal
    axis off %关闭坐标轴显示
    drownnow %刷新屏幕
    pause(0.3)
    %下面语句是将静态图像的每一帧进行叠加存储,并写入到filename文件夹中
    f=getframe(gcf);
    imind=frame2im(f);
    [imind,cm] = rgb2ind(imind,256);
    if k==1
    imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',1.5);
    else
    imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.3);
    end 
end

长草颜团子动图:
在这里插入图片描述
附上代码:

filename = '团子.gif';
b0=[0.69,0.88,0.9];
g0=[0.19608,0.80392,0.19608];%设置草的颜色
% 创建图形窗口并设置属性 
hFigure=figure('menubar','none','NumberTitle','off','position',... 
    [100 100 500 400],'name','团子','color',b0); 
movegui(hFigure,'center');%居中 
%创建坐标轴,用于显示背景图片和文本 
hAxes=axes('visible','off','units','normalized','position',[0 0 1 1]); 
%% 地
plot([-40 170],[-20 -20],'k','linewidth',4);
%% 草
hold on
theta=9*pi/10:0.1:10.8*pi/10;
x=19+20*cos(theta);
y=23+20*sin(theta);
h=plot(x,y,'k','linewidth',3);
theta=0:0.01:2*pi;%180度到360度的圆弧
xL1=-4+4*cos(theta);
yL1=29+3*sin(theta);
hL1=plot(xL1,yL1,'k','linewidth',3,'EraseMode','xor');
hL11=fill(xL1,yL1,g0);
theta=0:0.01:2*pi;%180度到360度的圆弧
xR1=4+4*cos(theta);
yR1=28+3*sin(theta);
hR1=plot(xR1,yR1,'k','linewidth',3,'EraseMode','xor');
hR11=fill(xR1,yR1,g0);
%% 头
theta=0:0.01:2*pi;%180度到360度的圆弧
x1=20*cos(theta);
y1=19*sin(theta);
h1=plot(x1,y1,'k','linewidth',6,'EraseMode','xor');
h11=fill(x1,y1,'w');
%% 眼睛
theta=0:0.01:2*pi;%180度到360度的圆弧
xL2=-8+2.5*cos(theta);
yL2=4+2.5*sin(theta);
hL2=plot(xL2,yL2,'k','EraseMode','xor');
hL22=fill(xL2,yL2,'k');
theta=0:0.01:2*pi;%180度到360度的圆弧
xR2=8+2.5*cos(theta);
yR2=4+2.5*sin(theta);
hR2=plot(xR2,yR2,'k','EraseMode','xor');
hR22=fill(xR2,yR2,'k');
%% 嘴
theta=-12*pi/10:0.1:0.5*pi/10;
xL3=-2+2*cos(theta);
yL3=2*sin(theta);
hL3=plot(xL3,yL3,'k','linewidth',3);
theta=-9.5*pi/10:0.1:2*pi/10;
xR3=2+2*cos(theta);
yR3=2*sin(theta);
hR3=plot(xR3,yR3,'k','linewidth',3);
%% 爱心
t=linspace(-3,3,50);
x4=138+16*(sin(t)).^3;
y4=-3+13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
plot(x4,y4,'k','linewidth',5);%画爱心
fill(x4,y4,'r');
axis equal
for k=1:15
    if k==1
        set(h,'xdata',x,'ydata',y);
        set(h1,'xdata',x1,'ydata',y1);
        set(h11,'xdata',x1,'ydata',y1);
        set(hL1,'xdata',xL1,'ydata',yL1);
        set(hL11,'xdata',xL1,'ydata',yL1);
        set(hR1,'xdata',xR1,'ydata',yR1);
        set(hR11,'xdata',xR1,'ydata',yR1);
        set(hL2,'xdata',xL2,'ydata',yL2);
        set(hL22,'xdata',xL2,'ydata',yL2);
        set(hR2,'xdata',xR2,'ydata',yR2);
        set(hR22,'xdata',xR2,'ydata',yR2);
        set(hL3,'xdata',xL3,'ydata',yL3);
        set(hR3,'xdata',xR3,'ydata',yR3);
    end
    if k==2
        set(h,'xdata',x+15,'ydata',y+40);
        set(h1,'xdata',x1+15,'ydata',y1+40);
        set(h11,'xdata',x1+15,'ydata',y1+40);
        set(hL1,'xdata',xL1+15,'ydata',yL1+40);
        set(hL11,'xdata',xL1+15,'ydata',yL1+40); 
        set(hR1,'xdata',xR1+15,'ydata',yR1+40);
        set(hR11,'xdata',xR1+15,'ydata',yR1+40);
        set(hL2,'xdata',xL2+15,'ydata',yL2+40);
        set(hL22,'xdata',xL2+15,'ydata',yL2+40);
        set(hR2,'xdata',xR2+15,'ydata',yR2+40);
        set(hR22,'xdata',xR2+15,'ydata',yR2+40);
        set(hL3,'xdata',xL3+15,'ydata',yL3+40); 
        set(hR3,'xdata',xR3+15,'ydata',yR3+40);
    end
    if k==3
        set(h,'xdata',x+30,'ydata',y);
        set(h1,'xdata',x1+30,'ydata',y1);
        set(h11,'xdata',x1+30,'ydata',y1);
        set(hL1,'xdata',xL1+30,'ydata',yL1);
        set(hL11,'xdata',xL1+30,'ydata',yL1);
        set(hR1,'xdata',xR1+30,'ydata',yR1);
        set(hR11,'xdata',xR1+30,'ydata',yR1);
        set(hL2,'xdata',xL2+30,'ydata',yL2);
        set(hL22,'xdata',xL2+30,'ydata',yL2);
        set(hR2,'xdata',xR2+30,'ydata',yR2);
        set(hR22,'xdata',xR2+30,'ydata',yR2);
        set(hL3,'xdata',xL3+30,'ydata',yL3);
        set(hR3,'xdata',xR3+30,'ydata',yR3);
    end
    if k==4
       set(h,'xdata',x+45,'ydata',y+40);
       set(h1,'xdata',x1+45,'ydata',y1+40);
       set(h11,'xdata',x1+45,'ydata',y1+40);
       set(hL1,'xdata',xL1+45,'ydata',yL1+40);
       set(hL11,'xdata',xL1+45,'ydata',yL1+40);
       set(hR1,'xdata',xR1+45,'ydata',yR1+40);
       set(hR11,'xdata',xR1+45,'ydata',yR1+40);
       set(hL2,'xdata',xL2+45,'ydata',yL2+40);
       set(hL22,'xdata',xL2+45,'ydata',yL2+40);
       set(hR2,'xdata',xR2+45,'ydata',yR2+40);
       set(hR22,'xdata',xR2+45,'ydata',yR2+40);
       set(hL3,'xdata',xL3+45,'ydata',yL3+40);
       set(hR3,'xdata',xR3+45,'ydata',yR3+40);
    end
    if k==5
        set(h,'xdata',x+60,'ydata',y);
        set(h1,'xdata',x1+60,'ydata',y1);
        set(h11,'xdata',x1+60,'ydata',y1);
        set(hL1,'xdata',xL1+60,'ydata',yL1);
        set(hL11,'xdata',xL1+60,'ydata',yL1);
        set(hR1,'xdata',xR1+60,'ydata',yR1);
        set(hR11,'xdata',xR1+60,'ydata',yR1);
        set(hL2,'xdata',xL2+60,'ydata',yL2);
        set(hL22,'xdata',xL2+60,'ydata',yL2);
        set(hR2,'xdata',xR2+60,'ydata',yR2);
        set(hR22,'xdata',xR2+60,'ydata',yR2);
        set(hL3,'xdata',xL3+60,'ydata',yL3);
        set(hR3,'xdata',xR3+60,'ydata',yR3);
    end
    if k==6
        set(h,'xdata',x+80,'ydata',y+40);
        set(h1,'xdata',x1+80,'ydata',y1+40);
        set(h11,'xdata',x1+80,'ydata',y1+40);
        set(hL1,'xdata',xL1+80,'ydata',yL1+40);
        set(hL11,'xdata',xL1+80,'ydata',yL1+40);
        set(hR1,'xdata',xR1+80,'ydata',yR1+40);
        set(hR11,'xdata',xR1+80,'ydata',yR1+40);
        set(hL2,'xdata',xL2+80,'ydata',yL2+40);
        set(hL22,'xdata',xL2+80,'ydata',yL2+40);
        set(hR2,'xdata',xR2+80,'ydata',yR2+40);
        set(hR22,'xdata',xR2+80,'ydata',yR2+40);
        set(hL3,'xdata',xL3+80,'ydata',yL3+40);
        set(hR3,'xdata',xR3+80,'ydata',yR3+40);
    end
    if k==7
        set(h,'xdata',x+100,'ydata',y);
        set(h1,'xdata',x1+100,'ydata',y1);
        set(h11,'xdata',x1+100,'ydata',y1);
        set(hL1,'xdata',xL1+100,'ydata',yL1);
        set(hL11,'xdata',xL1+100,'ydata',yL1);
        set(hR1,'xdata',xR1+100,'ydata',yR1);
        set(hR11,'xdata',xR1+100,'ydata',yR1);
        set(hL2,'xdata',xL2+100,'ydata',yL2);
        set(hL22,'xdata',xL2+100,'ydata',yL2);
        set(hR2,'xdata',xR2+100,'ydata',yR2);
        set(hR22,'xdata',xR2+100,'ydata',yR2);
        set(hL3,'xdata',xL3+100,'ydata',yL3);
        set(hR3,'xdata',xR3+100,'ydata',yR3);
    end
    axis equal
    axis off;%关闭坐标轴显示
    axis([-40 170 -30 90]);
    drawnow; % 刷新屏幕
    pause(0.3)
    
%下面语句是将静态图像的每一帧进行叠加存储,并写入到filename文件夹中
f = getframe(gcf);
imind = frame2im(f);
[imind,cm] = rgb2ind(imind,256);
if k == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',1.5);
else
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.3);
end

end

参考文献:http://www.matlabsky.com/thread-240-1-1.html

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值