LoginSignup
0
0

More than 3 years have passed since last update.

短いコードで複雑な結果を得る~一次元セル・オートマトン、画像で保存版~

Posted at

これは何?

前回の記事「短いコードで複雑な結果を得る~一次元セル・オートマトン~」の修正版です。
以下を修正しました。

  • オートマトンをジェネレータで実装
  • 結果を画像として保存

1セル1ピクセルで描画するとちょっと何言ってるか分からないですね。

コード

import numpy as np
from PIL import Image
import random

# セル状態を返すジェネレータ
def CA( rule_id, n_cell, init_cell_id = -1):

    rule = list(map(int, f'{rule_id:08b}'))

    # 初期状態
    if init_cell_id < 0:
        cell_c = [random.randint(0,1) for _ in range(n_cell)]
    else:
        # 初期値としてint値を与えると、そのビットパターンを初期状態とする
        cell_c = list(map(int, f'{init_cell_id:b}'.zfill(n_cell)[-n_cell:]))
        cell_c = np.array(cell_c)

    yield cell_c

    while True:
        cell_n = [ rule[cell_c[i-1]*4 + cell_c[i]*2 + cell_c[(i+i) % n_cell]] for i in range(n_cell)] # 次の状態
        cell_c = cell_n # 状態の入替
        yield cell_c


random.seed(110)

# データ作成
W, H = 640, 480 # 幅, 高
img = np.zeros((H, W))
ca = CA( 30, W) # ルールID, セル数
for h, c in zip(range(H), ca):
    img[h,:] = c

# 画像として保存
img = Image.fromarray(img*255).convert('RGB')
img.save('ret.png')

結果

ret.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0