アニメーションの原理は「パラパラ漫画」です。一連の静止画を取っ替え引っ替え連続して再生することで、まるで動いているように見せることができます。
まず、二次元での点のアニメから始めます。
# python-3D-graphics-step-by-step-6.py 08/04/2023 by Kero
# (6) show point animation on 2D
# preparation
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation # アニメのためのモジュール導入。
# graph area settings
# これまではデフォルト設定されていたけど、これからは正式に書く。
fig = plt.figure() # 描画領域の確保。カッコの中に大きさ等を設定。空なら自動。
ax = fig.add_subplot(111) # figure内の1行1列の1番目の区域をaxとする宣言。
cuts = [] # カット(cut)を追加して貯める器(リスト)。
# make cuts
cut = [plt.scatter(0, 0, s=500)] # Important! リストオブジェクト"[ ]"にすること。
cuts.append(cut) # cutsは「リストのリスト」"[[ ],[ ],[ ]]"の形になる。
cut = [plt.scatter(0.5, 2, s=2000)] # そうしないとArtistAnimationで処理してくれない。
cuts.append(cut)
cut = [plt.scatter(1, 4, s=8000)] # 点の大きさを 's'(サイズ) で指定。
cuts.append(cut)
# make animation (a formula)
anime = animation.ArtistAnimation(fig,cuts, interval=1000) # 2000ミリ秒停止。
anime.save('python-3D-graphics-step-by-step-6.gif', writer='pillow')
# ファイル容量を軽くするため gif 形式に。
# 'pillow'はPython専用画像処理ライブラリ。予めインストール必要。
# show figure
plt.show()
レッスン5からの進展は、まず matplotlib の中から ‘animation’ という機能をインポートすることです。それを ‘animation’ と呼ぶことにします。’preparation’ に追記しています。
次に、これまで意識せずデフォルトに任せていた「描画舞台の大道具」を、意識的に記述することにします。それを ‘graph area setting’ に記述しています。’fig’ は壁面のオブジェクト、’ax’ は 壁面に掛けるガクブチのオブジェクトと考えてください。これから ‘ax’ の中に色々な絵を書き込んでいきます。
‘add_subplot(111)’ は、「壁面を1行1列に区分けした1番目の場所に設置するガクブチ」という意味です。
以下のコードでは、ひとつの静止画を ‘cut’ という名前で、また一連の cut を順に溜め込む入れ物を ‘cuts’ と呼ぶことにします。cuts は最初は空っぽです。
’make cuts’ の段落では、最初に(0, 0) の点(サイズ=500)を作り、 ‘[ ]’ で挟んで「リストオブジェクト」という「モノ」にして cut に代入し、cut を ‘append’ で cuts に追加します。その他の点も同様にして作り、cuts に追加します。
cuts がパラパラ漫画の原本です。
‘make animation’ の段落では、定番の ‘ArtistAnimation’ という機能を使ってアニメを実現しています。matplotlib には他に ‘FuncAnimation’ という描画機能がありますが、こちらはムズいので、この入門講座では使いません(「私は使えない」が本音)。
出来上がった絵は ‘.save(…)’ で保存しておきましょう。保存ファイル形式は ‘gif’ が小さくてオトクだそうです。
‘pillow’ はPython 専用の画像処理ライブラリとされています。numpy や matplotlib 同様に、予めPython開発(実行)環境へ導入しておいてください。