Python (NumPy) でLifeGame を作る3[matplotlibで可視化]
Python (NumPy) でLifeGame を作る3[matplotlibで可視化]
行列を表示しても見づらいので、matplotlibで可視化してみました。
前回:
環境
コード
描画するpltメソッドを追加。
LifeGameのクラスファイル(matplotlibで可視化)
matplotlib のanimaion をgifで保存するには、imagemagickが必要です。
実行例
Tテトロミノ
CELLS_WIDTH = 11
cells = np.zeros((CELLS_WIDTH, CELLS_WIDTH), 'int')
cells[int(CELLS_WIDTH/2), 4:7] = 1
cells[int(CELLS_WIDTH/2)+1, 5:6] = 1
print(cells)
[[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 1 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]]
上の初期セルをセットして、20回まわすと以下のパターンが見れる。
lg = LifeGame(cells)
lg.plt_anime(20, save_file='t-tetoromino.gif')
以下、gif画像。 ずっと動き続けるので注意
ミツバチの巣箱(beehive)
今度は、ミツバチの巣箱というパターンです。
CELLS_WIDTH = 17
cells = np.zeros((CELLS_WIDTH, CELLS_WIDTH), 'int')
cells[int(CELLS_WIDTH/2)-1, int(CELLS_WIDTH/2)-1:int(CELLS_WIDTH/2)+2] = 1
cells[int(CELLS_WIDTH/2)+1, int(CELLS_WIDTH/2)-1:int(CELLS_WIDTH/2)+2] = 1
cells[int(CELLS_WIDTH/2), int(CELLS_WIDTH/2)-2] = 1
cells[int(CELLS_WIDTH/2), int(CELLS_WIDTH/2)+2] = 1
print(cells)
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
25回ほど回すと、4つに分岐し収束します。
lg = LifeGame(cells)
lg.plt_anime(25, save_file='beehive.gif')
参考リンク