본문 바로가기

Software/MATLAB

MATLAB에서 간단히 움직이는 그림 구현하기 (애니메이션 구현)

오랜만에 MATLAB 업데이트인데요... 뭐 크게 익힐 건 없지만^^... 이번에 정리할 내용은 간단히 애니메이션을 구현해보는 것입니다. 여러가지 접근법이 있지만, 특별히 그림이 복잡하지 않다면 간단히 fill명령으로 가능합니다.

fill 명령 !

MATLAB에서 그림을 그리는 명령어중 fill이라는 명령이 있습니다. 간단한 예제를 하나 보면

위에 보이는 코드에 x, y가 보이시지요?^^ 아래 결과 그래프와 같이 보시면, (-1,-1)->(-1,1)->(1,1)->(1,-1) 순서로 점을 잡고 fill명령을 사용하면 그 둘레로 만들어진 다각형이 만들어집니다. 색상코드 'r'을 사용했으니 빨간색으로 칠해지구요. 그 그림을 box라는 변수에 개체화해서 저장합니다.

간단히 fill명령을 보았으니 간단히 저 사각형을 돌려보죠.

저 코드에서는 box의 속성 중 EraseMode를 Normal로 설정한 것이 보일겁니다. 저것이 배경은 놔두고 저 속정을 가지 개체만 다시그리라는 뜻입니다. 간단히 2차원 평면의 회전행렬 Rot을 정의해서 45도 회전시켜 보는 겁니다. 그리고 set 명령이 보이는데요. 개체화된 box를 set명령으로 새로운 좌표를 인식시키는 겁니다.

위와 같이 만들어 지는 것이지요

간단한 예제 !

AniTest = figure('name','Animation Test','numbertitle','off');
x = [-3 -3.5  -4 -4 -3];
y = [1 1.5 1 -1 -1];
 
box = fill(x,y, 'r','EraseMode','normal');
grid on
hold on
axis([-5 5 -5 5]);
 
t = 0:0.01:2*pi;
plot(3*cos(t), 3*sin(t))
plot(17^0.5*cos(t), 17^0.5*sin(t))
plot((3.5^2+1.5^2)^0.5*cos(t), (3.5^2+1.5^2)^0.5*sin(t), 'c')
 
for t = 0:0.01:2*pi
    updatedX = [10^0.5*cos(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*cos(-(t+pi+atan(3/7))) 17^0.5*cos(-(t+pi+atan(1/4))) 17^0.5*cos(-(t+pi-atan(1/4))) 10^0.5*cos(-(t+pi-atan(1/3)))];
    updatedY = [10^0.5*sin(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*sin(-(t+pi+atan(3/7))) 17^0.5*sin(-(t+pi+atan(1/4))) 17^0.5*sin(-(t+pi-atan(1/4))) 10^0.5*sin(-(t+pi-atan(1/3)))];
    set(box, 'Xdata', updatedX,'Ydata', updatedY);
    drawnow;
    
    for i=1:5000000
        temp = i;
    end
end

음 대충 오각형처럼 생긴 것을 원둘레로 빙빙 회전시키는 코드입니다. 위 예제에서는 for문을 이용해서 원둘레를 돌도록 설정했는데요. for문안에 다시 만들어진 for문은 컴퓨터의 속도가 원체 빨라서 좀 천천히 그리라는 의미로 넣어둔것입니다. 그리고 drawnow; 라는 명령이 보이는데요. 만약 이 명령어를 넣지 않고서 그냥 전체 실행을 하면 실행된 결과만 한참있다가 보시게 됩니다. for문 내부 실행을 완료한 다음 그래프가 나타나거든요. 그래서 매 for문마다 그림을 업데이트 시켜줘야만 합니다.

반응형