今週のフラクタル90((x^2-y^2+a,2(x^2-y^2+a)y+b) 他)
どうも、108Hassiumです。
今回は$${(x^2-y^2+a,2(x^2-y^2+a)y+b)}$$に関するフラクタル図形を紹介します。
(x^2-y^2+a,2(x^2-y^2+a)y+b)










(x^2-(2xy+b)^2+a,2xy+b)









マンデルブロ集合あるある?
以下のコードは、Processingで($${z^2+c}$$の)マンデルブロ集合を描画するコードです。
void setup(){
size(2000,2000);
background(0);
noStroke();
double x,y,px,py,a,b;
boolean o;
for(int k=0;k<2000;k++){
for(int m=0;m<2000;m++){
a=(double)k/500.0-2.0;
b=(double)m/500.0-2.0;
x=0;
y=0;
o=true;
for(int n=1;n<=500&&o;n++){
px=x;
py=y;
x=px*px-py*py+a;
y=2.0*px*py+b;
if(x*x+y*y>4){
o=false;
fill(255);
rect(k,m,1,1);
}
}
}
}
}※☟解説
このコードのうち、$${z_{n+1}=z_n^2+c}$$という数列を計算しているのは以下の部分です。
...
px=x;
py=y;
x=px*px-py*py+a;
y=2.0*px*py+b;
...xとyが$${z_{n+1}}$$の実部と虚部で、$${z_n}$$の値はpxとpyに保存しています。
ところで、この部分を以下のように書き換えるとどんな画像が生成されるでしょうか?
...
x=x*x-y*y+a;
y=2.0*x*y+b;
...正解はこうです。

x*x-y*y+aの値は書き換え前と同様に正しく計算されますが、次の行のyの計算では更新後のxの値が使われるので、結局$${(x^2-y^2+a,2(x^2-y^2+a)y+b)}$$のマンデルブロ集合が描画されます。
独学で$${z^2+c}$$のマンデルブロ集合の描画に挑戦した経験のある人の中には、間違って$${(x^2-y^2+a,2(x^2-y^2+a)y+b)}$$のマンデルブロ集合を描画してしまったことのある人もいるのではないでしょうか。(私もあります)
ちなみに$${(x^2-(2xy+b)^2+a,2xy+b)}$$は、xとyの計算順序を逆にすることで描画されます。
