오늘은 2차원 공간에 존재하는 궤적이 있고 그 위에서 움직이는 입자가 있는 상황을 가정하여 이를 그래픽적으로 도식화하고 그 움직임을 담은 애니메이션 파일을 만들어보는 예제를 소개하고자 합니다. 먼저 궤적을 구성하는 점들의 좌표 데이터를 생성하는 작업부터 진행합니다. 그 과정은 다음과 같이 정의해봅니다.
n = 400
t = [0:2*!pi:2*!pi/n]
r = 0.5+COS(t)
x = r*COS(t)
y = r*SIN(t)
HELP, x, y
여기서는 총 401개의 X축 및 Y축 좌표값들로 구성된 배열 x 및 y를 정의하였습니다. 이러한 점들로 구성된 궤적을 그림으로 표출하기 위하여 다음과 같은 과정을 추가로 실행합니다.
sx = 600
sy = 600
win = WINDOW(DIMENSIONS=[sx, sy], /NO_TOOLBAR)
p = PLOT(x, y, XRANGE=[-0.3, 1.7], COLOR='green', $
FONT_SIZE=11, MARGIN=0.1, /CURRENT)
sym = SYMBOL(x[0], y[0], 'circle', /SYM_FILLED, SYM_SIZE=2, $
SYM_COLOR='red', /DATA)
여기서는 그래픽 창을 띄운 다음 PLOT 함수를 사용하여 이 궤적을 표시하고 SYMBOL 함수를 사용하여 첫번째 점의 위치에 원형 심볼을 추가하였습니다. 표출된 그림을 보면 다음과 같습니다.

그러면 원형 심볼의 위치를 순차적으로 변화시켜서 궤적상에서 운동하는 모습을 구현해봅시다. 이러한 작업을 위해서는 반복형 구문을 사용하면서 그 안에서 심볼의 위치를 순차적으로 변경하면 되는데, 구체적으로는 SYMBOL 함수로 구현되어 있는 심볼 개체에 대하여 SetData 메서드를 사용하여 위치를 변경해주면 됩니다. 이러한 작업을 위하여 추가되어야 할 내용은 다음과 같이 매우 간단합니다.
FOR j = 0, n DO sym.SetData, x[j], y[j]
이와 같은 내용까지 실행하면 그래픽 창에 표출된 그림 내에서 심볼이 궤적을 따라 순차적으로 이동하는 모습을 볼 수 있을 것입니다. 다만 이왕이면 이렇게 움직이는 모습을 애니메이션으로 담은 파일을 제작할 수 있다면 더 좋을 것입니다. 그러면 애니메이션 GIF 파일로 만들어보기로 합시다. 이를 위해서는 방금전에 제시되었던 반복형 구문의 내용이 대폭 수정되어야 합니다. 반복 회차마다 표출되는 화면을 캡쳐하여 프레임별 이미지로 삽입하는 과정이 추가되어야 하기 때문입니다. 애니메이션 GIF 파일을 만드는 방법에 관해서는 예전에 관련 게시물을 통하여 소개한 바 있습니다. 따라서 그 방법에 관한 자세한 내용은 이 게시물을 참조하기로 하고, 이 내용을 바탕으로 하여 다음과 같이 처리해봅시다.
wfile = 'motion_on_curve.gif'
FOR j = 0, n DO BEGIN
sym.SetData, x[j], y[j]
cap = win.CopyWindow(WIDTH=sx)
frame = COLOR_QUAN(cap, 1, r, g, b)
WRITE_GIF, wfile, frame, r, g, b, /MULTIPLE, $
DELAY_TIME=2, REPEAT_COUNT=0
ENDFOR
WRITE_GIF, wfile, /CLOSE
여기서는 매 회차마다 SetData 메서드에 의하여 변화된 그림의 모습을 CopyWindow 메서드를 사용하여 캡쳐하고, 이렇게 캡쳐된 이미지를 COLOR_QUAN 함수를 사용하여 8비트 이미지로 변환한 다음 이를 WRITE_GIF 명령에 투입하는 방식으로 작업이 진행됩니다. 또한 DELAY_TIME 키워드를 2로 설정하여 초당 50 프레임으로 애니메이션이 진행되도록 하였고 REPEAT_COUNT 키워드를 0으로 설정하여 무한반복이 되도록 하였습니다. 이 작업이 모두 끝나면 motion_on_curve.gif라는 이름의 애니메이션 GIF 파일이 생성될 것입니다. 이 파일은 아래에 첨부하였습니다.

이와 같이 궤적 상에서 심볼이 움직이는 애니메이션이 진행되는 모습을 바로 확인할 수 있습니다. 그리고 이러한 애니메이션을 GIF 대신 MP4 형식의 동영상 파일로 제작하는 것도 가능합니다. 그 방법에 관해서도 관련 게시물들(링크 1, 링크 2)을 예전에 올린 바 있습니다. 따라서 이 내용을 바탕으로 하여 MP4 동영상 파일로 만드는 과정을 작성해본다면 대략 다음과 같습니다.
nn = n*2
data_cap = BYTARR(3, sx, sy, nn)
FOR j = 0, nn-1 DO BEGIN
jj = j MOD 400
sym.SetData, x[jj], y[jj]
cap = win.CopyWindow(WIDTH=sx)
data_cap[*, *, *, j] = cap
ENDFOR
WRITE_VIDEO, 'motion_on_curve.mp4', data_cap, VIDEO_FPS=60
여기서는 기본적으로 WRITE_VIDEO 명령을 사용하는 방식으로 처리하였습니다. 다만 애니메이션 GIF와는 달리 여기서는 무한반복이 되도록 할 수는 없기 때문에 2회만 반복되도록 하였습니다. 이를 위하여 nn을 위와 같이 정의하였고 반복형 구문 내에서 x 및 y를 인덱싱할 목적으로 400을 넘지 않는 인덱스 jj를 정의한 점 등을 유의하면 됩니다. 이와 같은 방식으로 생성된 동영상은 아래 링크를 통하여 보실 수 있습니다.
https://youtube.com/shorts/QSu9XhuWpBs?feature=share
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > New Graphics' 카테고리의 다른 글
| 데이터 포인트들을 다양한 색상으로 표출하기 [3] (0) | 2026.03.06 |
|---|---|
| 막대 차트(Bar Chart) 표출하기 (0) | 2025.12.09 |
| BOXPLOT 함수 소개 (0) | 2025.12.03 |
| 2종의 막대 그래프를 서로 붙여서 표출하기 (0) | 2025.11.27 |
| 바코드 형태의 이미지의 표출 및 응용 [2] (0) | 2025.11.17 |