주요 콘텐츠

애니메이션 기법

MATLAB®에서 네 가지 기본 기법을 사용하여 애니메이션을 생성할 수 있습니다.

기법설명

루프에서 데이터 업데이트.

루프에서 그래픽스 객체의 속성을 업데이트하고 업데이트 내용을 화면에 표시합니다. 이 기법은 플롯에서 대부분의 내용이 똑같이 유지되는 경우 애니메이션을 생성하는 데 유용합니다. 예를 들어, 루프에서 Scatter 객체의 XData 속성과 YData 속성을 설정하여 애니메이션 효과를 생성할 수 있습니다.

루프에서 데이터를 업데이트하여 애니메이션 만들기

행렬 변환 적용.

변환을 객체에 적용합니다. 이 기법은 객체 그룹의 위치와 방향을 한꺼번에 변경하려는 경우 유용합니다. 그래픽스 객체를 transform 객체 아래에 있는 자식으로 그룹화합니다. hgtransform 함수를 사용하여 transform 객체를 생성합니다. transform 객체의 모든 자식의 위치를 조정하려면 이 객체의 Matrix 속성을 설정합니다.

행렬 변환을 사용하여 애니메이션 만들기

애니메이션 GIF 파일 생성.

루프에서 Figure를 업데이트하고 exportgraphics 함수를 사용하여 애니메이션 GIF의 프레임을 캡처합니다.

애니메이션 GIF 파일 생성하기

동영상을 생성합니다.

루프에서 Figure를 업데이트하고 getframe 함수를 사용하여 동영상의 프레임을 캡처합니다. 이 기법은 실시간으로 빠르게 그릴 수 없는 복잡한 애니메이션이나, 다시 재생하기 위해 애니메이션을 저장하려는 경우에 유용합니다. 동영상을 재생하려면 movie 함수를 사용합니다.

동영상을 만들고 재생하기

루프에서 데이터를 업데이트하여 애니메이션 만들기

선을 따라 움직이는 마커의 애니메이션을 만듭니다.

  • 사인파를 플로팅합니다. 그런 다음 마커를 플로팅하고 이를 변수 mkr로 저장합니다. 그러면 나중에 마커의 속성에 액세스할 수 있습니다.

  • xlim, ylim, zlim 함수를 사용하여 각 좌표축의 제한을 설정합니다. 제한을 설정하면 자동 축 제한 계산이 비활성화되는데, 그 대신 화면 깜박임이 생길 수 있고 애니메이션 성능에 영향이 있을 수 있습니다.

  • 마커 좌표를 업데이트하는 for 루프를 생성합니다. 각 반복에서 Scatter 객체(mkr)의 XDataYData 속성을 변경하여 선을 따라 마커를 이동시킵니다.

  • 각 루프 반복의 끝에서 drawnow 명령을 호출하여 Figure 표시를 업데이트합니다.

x = linspace(0,10,500);
y = sin(x);

% Plot a line and a marker
plot(x,y)
hold on
mkr = scatter(NaN,NaN,[],"red","filled");
hold off
xlim([0 10])
ylim([-1 1])
zlim([-1 1])

% Move the marker along the line
for i = 1:length(x)
    mkr.XData = x(i);
    mkr.YData = y(i);
    drawnow
end

Animation of a red marker tracing a line plot of a sine wave

행렬 변환을 사용하여 애니메이션 만들기

효율적인 플롯 애니메이션 방법은 모든 점들을 반복하는 대신 하나 이상의 객체에 변환 행렬(transformation matrix)을 적용하는 것입니다. 사용할 수 있는 변환에는 평행 이동, 회전 및 스케일링 등이 있습니다. 사용자가 자체적인 변환 행렬을 정의할 수도 있습니다.

임의의 축에서 2π라디안만큼 회전하는 구의 애니메이션을 만듭니다.

  • sphere 함수를 사용하여 구의 좌표를 생성합니다.

  • 이름이 grpTransform 객체를 만듭니다. 그런 다음 surf 함수를 호출하고 부모 객체를 grp로 지정하여 구를 Surface 객체로 플로팅합니다.

  • 좌표축 그리드 선을 표시하고 3차원 보기에 플롯 상자를 표시합니다.

  • 0~2π 사이에서 간격이 균일한 각도 값 300개를 순차적으로 실행하는 for 루프를 만들고 매 반복(회차)마다 작은 각도만큼 구를 회전시킵니다. makehgtform 함수를 사용하여 각 작은 회전 각도에 대한 변환 행렬을 생성합니다. 그런 다음 grpMatrix 속성을 설정하여 회전을 수행합니다.

  • 각 루프 반복의 끝에서 drawnow 명령을 호출하여 Figure 표시를 업데이트합니다.

% Create the coordinates of a sphere
figure
ax = axes;
[x,y,z] = sphere(270);

% Create transform object and plot the sphere
grp = hgtransform(Parent=ax);
s = surf(ax,x,y,z,z,Parent=grp,EdgeColor="none");

% Display grid lines and show the plot box in 3-D
grid on
view(3)
axis vis3d
axis tight manual

% Rotate the sphere by small angles in a loop
for ang = linspace(0,2*pi,300)
   tm = makehgtform("axisrotate",[1,1,1],ang);
   grp.Matrix = tm;
   drawnow
end

Animation of a rotating sphere

애니메이션 GIF 파일 생성하기

포물선을 따라 움직이는 마커의 애니메이션 GIF 파일을 만듭니다.

  • 하나의 마커로 포물선을 플로팅합니다.

  • 매 반복 시 마커의 위치를 변경하는 for 루프를 만듭니다.

  • 각 루프 반복의 끝에서 exportgraphics 함수를 사용하여 Figure를 애니메이션 GIF 파일의 프레임으로 캡처합니다. Append=true 이름-값 인수를 지정하는 경우 exportgraphics는 현재 프레임을 캡처하여 지정된 GIF 파일에 추가합니다.

  • 결과로 생성되는 parabola.gif 파일이 현재 폴더에 저장됩니다.

% Plot a parabola and a marker
x = -10:0.5:10;
y = x.^2;
p = plot(x,y,"-o",MarkerFaceColor="red");

% Move the marker along the parabola and capture frames in a loop
for i=1:41
    p.MarkerIndices = i;
    exportgraphics(gca,"parabola.gif",Append=true)
end

Animation of a red marker tracing a line plot of a parabola

동영상을 만들고 재생하기

루프에서 getframe 함수를 사용하여 형태가 바뀌는 곡면 플롯의 동영상을 만듭니다. getframe 함수는 구조체로 구성된 배열에서 동영상 프레임을 캡처합니다. 동영상을 재생하려면 movie 함수를 사용합니다.

  • surf 함수를 사용하여 peaks 함수의 좌표를 곡면으로 플로팅하고, Surface 객체를 변수 s로 저장합니다.

  • axis tight manual 명령을 사용하여 플롯 상자를 곡면에 단단히 위치시키고 좌표축 제한을 고정합니다.

  • 애니메이션 프레임을 포함할 40개 구조체로 구성된, F라는 이름의 배열을 만듭니다.

  • 매 반복 시 곡면의 형태를 변경하는 for 루프를 만듭니다.

  • 각 루프 반복의 끝에서 drawnow 명령을 사용하여 Figure를 업데이트하고 getframe 함수를 사용하여 동영상 프레임을 캡처합니다.

  • 결과로 생성되는 동영상이 구조체형 배열 F로 저장됩니다.

% Plot a surface
Z = peaks;
s = surf(Z);
axis tight manual

% Change the shape of the surface and capture frames
loops = 40;
F(loops) = struct('cdata',[],'colormap',[]);
for j = 1:loops
    Zframe = sin(j*pi/10)*Z;
    s.ZData = Zframe;
    drawnow
    F(j) = getframe(gcf);
end

동영상을 두 번 재생합니다.

fig = figure;
movie(fig,F,2)

Animation of a surface plot

참고 항목

함수

도움말 항목