ブッダブロ

2011 / 02 / 24 by
Filed under: AS 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

フラクタルねたで続けます。
マンデルブロ集合を基にして、よりアーティスティックな表現を求めて発見された「ブッダブロ」なるものがあるということで、ActionScript でコーディングしてみました。それが↓

ブッダブロ Buddhabrot – wonderfl build flash online

ブッダブロとは何か? ウィキペディアの日本語版英語版を読んでみると、その形状が仏陀に似ているから付いた名とのこと。
で、元々の名前は「ガネーシャ」というそうな。ガネーシャってのはヒンドゥー神話に出てくる像の頭をした神様のこと。仏教で言うと歓喜天ですな。でもガネーシャには全然似ていないと思う也。
仏陀は、頭に見立てられる部分が螺髪っぽいと言われれば、まぁそうかなぁ、と思わないでもない。
ヒンドゥーあるいは仏典と、インド絡みで考えるならばむしろ、その形状から想起されるのは、むしろだるまじゃないすかねぇ。だるまのどこがインドだ、という向きは達磨を読んでくだされ。

まぁ、そんな私の個人的な想いはどうでもいいんですが、マンデルブロ集合を描くコードをちょこっと改造するだけで簡単にコーディングできますよブッダブロは。

以前マンデルブロ集合の描画をコーディングするときに、以下の漸化式が発散するか否か、発散した場合は何回ループして発散したか、で色を決めるという話をしました。


zn+1 = zn ^ 2 + c;

で、複素数 c は複素平面全座標を舐めたわけです。それに対してブッダブロではランダムで選んだある一定数の座標を複素数 c として、漸化式を評価します。wonderfl 環境で言えば 465×465=216,225回も漸化式を評価しましたが、ブッダブロではそこまでしません。今回のコードでは仮に3,600回としてみました。

そしてマンデルブロ集合の描画と根本的に異なるところは、発散評価中に計算された複素数 z の値をすべて保持し続けることです。
例えば発散評価のループ回数を1000回とすると、z1 ~ z1000 までの1000個の値を保持する必要があります。
で、発散しなかったときはその1000個の複素数を複素数平面上にプロットします。発散したときはそのままスルー。
そして次の複素数 c で漸化式を評価し、同様に発散しなかったときはプロットします。
このとき前にプロットした座標と今回プロットした座標が被った場合、その座標は明るくする等の処置を施します。

発散しないときのみプロットされるということはランダムで選ばれる複素数 c が、マンデルブロ集合を描いたときに黒く塗りつぶされる部分に該当しなければならないということですね。

そんなわけで、今回のコードでは c のランダムの範囲を、実数部・虚数部それぞれ -1 ~ 1 にしました。実数軸はさらに 0.5 補正してます。
まぁ細かいことは投稿したコードを読んでみてください。そんなに複雑な処理はしていないので、簡単に解読できるものだと思います。
実際に作ってみて思ったことはステージサイズが 465×465 だと、ちと狭いですね。座標が被りまくりのもよう。800×800 くらいのステージサイズが良さげです。

[ad#aquioux_net_article]



Comments

Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!





WP-SpamFree by Pole Position Marketing