見出し画像

Pythonでジェネラティブアートwith Pyxel

Processing の作例で見かけるもやもやした模様(Peter de Jong Attractor)をPython のレトロゲームエンジン Pyxel で作ってみました。

Peter de Jong Attractor とは

下記の式で描かれるパターンで a,b,c,d の値によって色々な形になります。
 Xn+1 = sin(a * Yn) - cos(b * Xn)
 Yn+1 = sin(c * Xn) - cos(d * Yn)

http://paulbourke.net/fractals/peterdejong/

Pyxel とは

画面のサイズは 256 x 256 ドット、使える色は16色のみ、シンプルな仕様で、Pythonでドット絵スタイルのゲームが作れます。

Pyxel で描いてみる

ryotako さんの記事を参考にしました。

# Peter de Jong Attractor
from pyxel import *
from math import sin, cos
from random import choice, uniform
w = 256               #screen size
background_color = 0
dot_color = [3, 6, 9, 10, 14]
dot_count = 20000
p_min, p_max = -3, 3
init(w, w, fps=1)
def draw():
   cls(background_color)
   col = choice(dot_color)
   x, y = 0, 0
   a, b, c, d = [round(uniform(p_min, p_max), 2) for _ in range(4)]
   text(10, 10, "a="+str(a)+" b="+str(b)+" c="+str(c)+" d="+str(d), 7)
   for _ in range(dot_count):
       x, y = sin(a*y) - cos(b*x), sin(c*x) - cos(d*y)
       pset(x*w/5 + 128, y*w/5 + 140, col)
def update():
   pass
run(update, draw)

画像1

a,b,c,d は -3 から 3 までの乱数にして、1秒間に1フレームで描画しています。a,b,c,d の値によっては、ほとんど何も表示されなかったり、点がちらばっているだけの場合もあります。

この記事が気に入ったらサポートをしてみませんか?