Software/Python
Python에서 인터랙티브한 반응과 애니메이션 구현하기
PinkWink
2018. 9. 17. 12:22
예전에 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에서는 동작하지 않습니다.ㅠㅠ.
반응형