Matlab动画仿真完整案例总结

版权声明:原创文章,转载请注明: 转载自 DT-IOT的博客https://blog.csdn.net/weixin_41213648 https://blog.csdn.net/weixin_41213648/article/details/82286383

第一种形式:

作gif动画要用到getframe、frame2im、rgb2ind和imwrite函数,getframe函数用来抓取当前图形窗口中的图像,frame2im函数和rgb2ind函数用来将抓取的图像转为索引图像,imwrite函数用来将索引图像写入gif格式动画,需要注意的是imwrite函数不能将真彩图像写入gif格式动画。关于这些函数的具体用法,这里不再详述,请版友自行查阅帮助。下面只给出案例。
【例1】绕螺旋线运动的小球
效果图: http://attach.matlabsky.com/data/attachment/forum/month_1008/10081011521d8041b81f4fd54c.gif 

 

  1. filename = 'xiezhh.gif';
  2. z = linspace(0, 10*pi, 100);    %产生一个行向量
  3. x = [20*sin(z),zeros(1,10)];
  4. y = [20*cos(z),20*ones(1,10)];
  5. z = [z,linspace(10*pi,0,10)];
  6. plot3(x, y, z, 'r', 'linewidth', 2);    %绘制螺旋线
  7. hold on    %图形保持
  8. h = plot3(0,20,0, '.' , 'MarkerSize' ,40, 'EraseMode' , 'xor' );
  9. xlabel('X'); ylabel('Y'); zlabel('Z');    %添加坐标轴标签
  10. axis([-25 25 -25 25 0 40]);    %设置坐标轴范围
  11. view(-210,30);    %设置视角
  12.  
  13. for i = 1:length(x)
  14.     set(h, 'xdata' ,x(i), 'ydata' ,y(i), 'zdata' ,z(i));     
  15.     drawnow; % 刷新屏幕 
  16.     pause(0.05)    
  17.     f = getframe(gcf);  
  18.     imind = frame2im(f);
  19.     [imind,cm] = rgb2ind(imind,256);
  20.     if i == 1
  21.         imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.1);
  22.     else
  23.         imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);
  24.     end
  25. end
 

 

第二种形式:

利用moviein和movie函数,现将生成的动画存入一个由movien
函数定义的数组中,每一帧为数组的一个元素,最后用movie重复演示,movie后面的数字代表演示次数。
x=[-30:0.2:30];
y=[-30:0.2:30];
[x,y]=meshgrid(x,y);
n=5;
M = moviein(n);
for i=1:n
z=sin(sqrt(2*(x).^2+2*(y).^2)-2*pi*i/10);
zz=plot3(x,y,z,'parent',gca);
mesh(x,y,z);
grid on;
colormap([0,0.9,0.5]);
light('position',[1,1,2],'style','local','color','white');
material([0.5,0.4,0.3,10,0.3]);
set(gca,'zlim',[-10,10]');
M(i)=getframe(gca);
end
movie(M,20)
创建电影剪辑文件,并存储起来,如下:
aviobj=avifile('文件名.avi','fps',3);%定义一个avi文件,
%AVIOBJ = AVIFILE(FILENAME,'PropertyName',VALUE,'PropertyName',VALUE,...)
%各属性详细说明见matlab帮助
for i=1:n
%在当前窗体上生成一帧图像
frame=getframe(gca); %获得一帧图像
aviobj=addframe(aviobj,frame);%并加到电影剪辑文件中
end
aviobj=close(aviobj);%关闭文件,结束数值仿真模拟过程。

【例2】水波纹动态显示

效果图

 

filename = '水波纹动态显示.gif';

x=-8:0.5:8;

[XX,YY]=meshgrid(x);

r=sqrt(XX.^2+YY.^2)+eps;

Z=sin(r)./r;

surf(Z);

theAxes=axis;

fmat=moviein(20);

for j=1:20

    surf(sin(2*pi*j/20)*Z,Z)

    axis(theAxes)

    fmat(:,j)=getframe;

    %下面语句是将静态图像的每一帧进行叠加存储,并写入到filename文件夹中

    f = getframe(gcf);

    imind = frame2im(f);

    [imind,cm] = rgb2ind(imind,256);

    if j == 1

        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.1);

    else

        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);

    end

end

movie(fmat,10)

总结:

%下面语句生成gif动态图的完整子程序。

    %%filename = '文件名.gif';

    %%f = getframe(gcf); 

    %%imind = frame2im(f);

    %%[imind,cm] = rgb2ind(imind,256);

    %%if i == 1

        %%imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.1);

    %%else

        %%imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);

    %%end

只要将此程序模块插入到,动态循环for语句中,即可生成gif动画。

猜你喜欢

转载自blog.csdn.net/weixin_41213648/article/details/82286383