본문 바로가기

Software/Python

Python에서 인터랙티브한 반응과 애니메이션 구현하기

예전에 python의 matplotlib를 이용해서 애니메이션을 구현하는 이야기를 간단히 해보았습니다. 이번에는 조금 더 재미있는 애니메이션 이야기를 해보고 싶네요.^^.  화면에 점 하나를 찍고, 마우스로 다른 곳을 클릭하면 그 점이 천천히 따라오게 하는 것이죠^^ 코드는

import matplotlib.pyplot as plt
import numpy as np

x_goal = 1
y_goal = 1
x = 1
y = 1
dt = 0.01
Kp = 7

def click(event):
    global x_goal, y_goal
    x_goal = event.xdata
    y_goal = event.ydata

fig = plt.figure()
fig.canvas.mpl_connect("button_press_event", click)

plt.ion()

while True:
    x = x + Kp * (x_goal - x) * dt
    y = y + Kp * (y_goal - y) * dt

    plt.cla()
    plt.plot(x_goal, y_goal, 'c+', markersize=15)
    plt.plot(x, y, 'g*')

    plt.xlim(-2, 2)
    plt.ylim(-2, 2)

    plt.show()
    plt.pause(dt)

아주 심플합니다. (맨날 이렇게 이야기하죠^^) 여기서 마우스로 콕 찍어서 그 좌표를 얻는 부분이 fig.canvas.mpl_connect가 하는 일입니다. 그리고 마우스 클릭에 대한 콜백함수를 click으로 구현합니다. 거기서는 단지 클릭된 마우스의 좌표만 받도록 했습니다.

그리고 그 좌표로 천천히 따라가게 만들어야하는데, 그 시각적 효과를 while Ture: 바로 다음에 있는 x, y 를 계산하는 코드에서 수행합니다. 간단하게 일정 거리를 일정 에러의 비례만큼 따라가도록 한거죠.

시작하면 이렇게 되어있구요.

이렇게 마우스로 찍으면 별표가 따라가는 효과가 납니다. 이 코드는 jupyter notebook에서는 동작하지 않습니다.ㅠㅠ.


반응형