Clifford Attractorの定義に従って、
何も考えずに実装するとこのようになった。
ソースコードはこれだけ。
float a,b,c,d; float X,Y; float factor = 50; void setup(){ size(640, 480); background(255); a = random(-3, 3); b = random(-3, 3); c = random(-3, 3); d = random(-3, 3); X = random(-3, 3); Y = random(-3, 3); } void draw(){ noStroke(); stroke(0, 100); fill(255, 10); //rect(0, 0, width, height); translate(width/2, height/2); float XX = sin(a*Y) + c*cos(a*X); float YY = sin(b*X) + d*cos(b*Y); point(XX*factor, YY*factor); X = XX; Y = YY; }
点の集合のように見える。
これは1点だけランダムに決めて、
あとはCilfford Attractorの更新式で
点の座標を変化させてプロットしたものだ。
すると、点の集合になった。
1つ上の実装では初期点を5000ランダムにとって、
それぞれを描画することで点ではなく線で見えるようにしている。
また、Z方向を定義し、Z座標を使って
色を変化させることで魅力的な画像にしている。
今回の実装ではpoint()を使ったが、重たかった。
1つ上の実装ではbufferにある程度書き込んでから
画面に反映させるようにして高速化している。
また、PGraphics使っている。
だから5000点でも動いている。
1つ上の例がすごくいい出来なので
私がシンプルに実装する意味がなさそうに思えたが、
実際にやってみると、
1つ上の例がどれだけ良いものかがわかってきて、
より深い理解ができた。