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);動畫
%------------------------------------------------spa
此外,利用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遍