Edited at

[Python] ボールのアニメーションを表示する

More than 1 year has passed since last update.

Pythonで、matplotlibを利用してボールのアニメーションの表示を行った。


環境

macOS Sierra (10.12.6)

Python 3.6.1


ボールのアニメーションの表示


ball_animation.py

import os

import numpy as np
import random
import matplotlib.pyplot as plt
import matplotlib.animation as animation

'''
データの作成
'''

def create_ball_data(time_count=128, time_interval=0.1, box_size=10):
data = np.zeros((time_count, 2*2))
position = np.zeros(2)
velocity = np.zeros(2)

#位置と速度の初期設定
for i in range(2):
position[i] = random.uniform(0, box_size)
velocity[i] = random.uniform(0.5, 0.8)

#データの作成
for t in range(time_count):
pos_next = position + velocity * time_interval

for i in range(2):
if pos_next[i] < 0 or pos_next[i] > box_size:
velocity[i] = velocity[i] * -1.0

position = position + velocity * time_interval

data[t] = np.copy(np.hstack((position,velocity)))

return data

'''
アニメーションの表示
'''

def show_animation(data, box_size, fname=None):
figure = plt.figure()
area = figure.add_subplot(111, autoscale_on=False)
area.xaxis.set_ticks(range(box_size + 1))
area.yaxis.set_ticks(range(box_size + 1))
area.grid()

balls = []
for i in range(len(data)):
draw, = area.plot([], [], 'o', color='blue', markersize=10)
balls.append(draw)

def update(t):
for i in range(len(data)):
p = data[t][:2]
balls[i].set_data(p[0], p[1])
return balls

ani = animation.FuncAnimation( figure, update, interval=1, frames=len(data), blit=False )

if fname:
try:
path_file_name = '{0}.gif'.format(os.path.join(os.path.dirname(__file__), fname ))
ani.save(path_file_name, writer='imagemagick', fps=30)
except Exception as ex:
print('save error')
pass

plt.show()

'''
メイン
'''

if __name__ == '__main__':
time_count = 150
box_size = 10

data = create_ball_data(time_count=time_count, box_size=box_size)
show_animation(data=data, box_size=box_size, fname='test')



エラーが出る場合

アニメーションの保存で、下記のようなエラーが出る場合、imagemagickをインストールしてください。


エラー内容

MovieWriter imagemagick unavailable warnings.warn("MovieWriter %s unavailable" % writer)


imagemagickのインストール方法

brew install imagemagick


実行結果