Matlab 中movie函数的使用

MATLAB中,创建电影动画的过程分为以下四步:

step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。

step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。

getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。
该函数格式有:
(1)F=gefframe,从当前图形框中得到动画帧
(2)F=gefframe(h),从图形句柄h中得到动画帧
(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧

step3:调用movie函数按照指定的速度和次数运行该电影动画。

当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。
该函数的主要格式有:
(1)movie(M),将矩阵M中的动画帧播放一次
(2)movie(M,n),将矩阵M中的动画帧播放n次
(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次

step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。

具体参见:

该方法的经典格式是:

%-----------------------------------------------

%录制电影动画
       for j=1:n
          %
          %这里输入我们的绘图命令
          %
          M(j) = getframe;
       end
       movie(M)
%举个我曾经做过的凸轮机构 运动仿真的实例
%%以下仅为 运动movie部分代码
%-----------------运动仿真开始------------------- 
figure(2) 
m=moviein(20); 
j=0; 
for i=1:360 
     j=j+1; 
     delta(i)=i*hd;%凸轮转角 
     xy=[xp',yp'];%凸轮实际轮廓曲线坐标 
     A1=[cos(delta(i)),sin(delta(i)); %凸轮曲线坐标旋转矩阵 
         -sin(delta(i)),cos(delta(i))]; 
     xy=xy*A1;%旋转实际凸轮轮廓曲线坐标 
     clf; 
     %-----------------绘制凸轮------------------ 
     plot(xy(:,1),xy(:,2));%绘制凸轮 
     hold on;grid on;axis equal; 
     axis([(-180) (470) (-200) (240)]); 
     plot([-(r0+h-40) (r0+h) ],[0 0],'k','LineWidth',2);%绘制凸轮水平轴 
     plot([0 0],[-(r0+h) (r0+rr)],'k','LineWidth',2);%绘制凸轮垂直轴 
     plot(r0*cos(ct),r0*sin(ct),'g--','LineWidth',2);%绘制基圆 
     plot(e*cos(ct),e*sin(ct),'c-','LineWidth',2);%绘制偏距圆 
     plot(e+rr*cos(ct),s0+s(i)+rr*sin(ct),'k','LineWidth',2);%绘制滚子圆 
     plot([e e+rr*cos(-phi(i))],[s0+s(i) s0+s(i)+rr*sin(-phi(i))],'k','LineWidth',2); 
     %绘制滚子圆标线 
     plot([e e],[s0+s(i) s0+s(i)+40],'k','LineWidth',2);%绘制推杆 
     %------------------绘制推杆曲线----------------------------- 
     plot([1:360]+r0+h,s+s0);%绘制推杆曲线 
     plot([(r0+h) (r0+h+360)],[s0,s0],'k','LineWidth',2);%绘制推杆垂直轴 
     plot([(r0+h) (r0+h)],[s0 s0+h],'k','LineWidth',2);%绘制水平轴 
     plot(i+r0+h,s(i)+s0,'r.','LineWidth',1.5);%绘制推杆曲线坐标动点 
     title('偏置直动滚子推杆盘形凸轮设计'); 
     xlabel('x/mm'); 
     ylabel('y/mm'); 
     m(j)=getframe; 
end 
movie(m);

 

%单帧显示方法
       f = getframe(gcf);
       colormap(f.colormap);
       image(f.cdata);

%------------------------------------------------

 

此外,利用immovie函数,我们可以从多帧图像阵列中创建MATALB 电影动画。[没用过]

%随意单张图片代码如下:

x=-8:0.5:8;

[XX,YY]=meshgrid(x);  

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

Z=sin(r)./r;

surf(Z);  %%生成了一幅静态的surf图片,XX,YY由meshgrid生成

theAxes=axis;

fmat=moviein(20);

for j=1:20;

 surf(sin(2*pi*j/20)*Z,Z)   %%取每一帧

 axis(theAxes)

 fmat(:,j)=getframe;

end

movie(fmat,10)  %动画放10遍

posted @ 2018-04-24 22:14  |itsRae|  阅读(13678)  评论(0编辑  收藏  举报