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)
a,b,c,d は -3 から 3 までの乱数にして、1秒間に1フレームで描画しています。a,b,c,d の値によっては、ほとんど何も表示されなかったり、点がちらばっているだけの場合もあります。
この記事が気に入ったらサポートをしてみませんか?