2017-02-09 12 views
3

はcicloidのアニメーションプロットを描画します次の関数を考えてみましょう。MATLABは:GIFにアニメーションのプロットを保存する方法

function animate1() 
    clear, clc 

    R = 1; 
    na = -pi/2; 
    t = 0:0.05:6; 
    v = 4; 

    for i = 1:length(t) 
     x0 = v*t(i); 
     y0 = R; 
     na = -v*t(i)/R; 
     fi = linspace(na,na+2*pi,100); 
     x = x0 + R*cos(fi); 
     y = y0 + R*sin(fi); 

     xc(i) = x0 + R*cos(na); 
     yc(i) = y0 + R*sin(na); 

     plot(x,y,'b',... 
      xc(i),yc(i),'*m',... 
      xc,yc,'r') 
     axis([-1 25 0 1.5]) 
     axis equal 
     pause(0.01) 
    end 

アニメーションプロットを出力するようにコードを変更することは可能ですか? GIFに?

ありがとうございます!

答えて

4

はい、imwriteは、アニメーションGIFをサポートしています。 AVIビデオの場合と同様に、getframeを順番にフレームを取得します。その後、それらをimwriteに渡しますが、GIFの場合は、以前からRGBから256カラーマップに変換する必要があります。このように:

for i = 1:nFrames 

    % draw stuff 

    frame = getframe(gcf); 
    img = frame2im(frame); 
    [img,cmap] = rgb2ind(img,256); 
    if i == 1 
     imwrite(img,cmap,'animation.gif','gif','LoopCount',Inf,'DelayTime',1); 
    else 
     imwrite(img,cmap,'animation.gif','gif','WriteMode','append','DelayTime',1); 
    end 
end 

詳細についてはopenExample('matlab/WriteAnimatedGIFExample')でとdoc imwriteを見てください。

+0

しかし、 'frame = getframe(gcf);'の 'gcf'は何ですか? – Eugeny89

+1

@ Eugeny89 'gcf'は現在のFigureハンドルを返します。まさに[ドキュメント](https://es.mathworks.com/help/matlab/ref/gcf.html?requestedDomain=www.mathworks.com) – codeaviator

+0

を見て、感謝@Cebri、 'gcf'は、の略です現在の数字を取得します。したがって、 'getframe(gcf)'は現在の全体像を取得します。現在の軸だけを取得したい場合(つまり、凡例、ティックマーカーなどを使わないで)、 'getframe(gca)'( 'gca' =現在の軸を取得)を使うこともできます。 – Florian