예전에 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에서는 동작하지 않습니다.ㅠㅠ.
반응형
'Software > Python' 카테고리의 다른 글
파이썬에서의 복사 얕은 복사와 깊은 복사 (10) | 2019.07.22 |
---|---|
Python에서 미분(차분)을 한다는 것. 데이터, 혹은 함수 (8) | 2019.07.15 |
파이썬(Python)에서 시리얼 통신으로 받은 데이터 실시간으로 그래프 그리기 (21) | 2019.07.03 |
아나콘다 Anaconda에서 가상환경에 텐서플로우 설치 (20) | 2018.06.01 |
Pandas 데이터프레임에서 컬럼값을 행방향 기준으로 정렬한 순위 만들기 argmax, idxmax, argsort (21) | 2018.05.30 |
아나콘다 환경이 여러개일 때 VSCode 적용하기 (22) | 2018.05.28 |
Numpy의 polyfit과 poly1d의 사용법 - 최소제곱법과 polynomial class (26) | 2018.05.14 |