2017-02-09 3 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

'프레임 = getframe (gcf);에서'gcf'는 무엇입니까? – Eugeny89

+1

@ Eugeny89'gcf'는 현재 그림 핸들을 반환합니다. [documentation] (https://es.mathworks.com/help/matlab/ref/gcf.html?requestedDomain=www.mathworks.com)을보십시오. – codeaviator

+0

감사합니다. @Cebri,'gcf'는 짧습니다. 현재 수치를 얻는다. 따라서'getframe (gcf)'는 현재의 전체 그림을 가져올 것이다. 범례, 틱 마커 등이없는 현재 축을 잡고 싶다면'getframe (gca)'('gca' = 현재 축 얻기)를 사용할 수도 있습니다. – Florian