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つ上の例がどれだけ良いものかがわかってきて、
より深い理解ができた。