バーニングシップ・フラクタル

2011 / 01 / 24 by
Filed under: Coding の素 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

以前、wonderfl に「畑政義写像」というフラクタルのコードを投稿しました。
この畑政義写像について知ったのは「主にコーディング」というサイトで、こちらはカオスやフラクタルについての記事がとても充実しています。
いろいろ楽しげなカオス、フラクタルの図形を拝見しましたが、その中で「バーニングシップ・フラクタル」というものがあることを知りました。なかなか目を惹くステキ形状じゃあありませんか。でもそのときはどういう計算でこのような図形が描かれるのか、というところまでは追求しませんでした。

過日、そのバーニングシップ・フラクタルを wonderfl に投稿した方がおられました。
そのコード本体と、コメント中にあった参照サイト等、いろいろ見た結果、普通のマンデルブロ集合の計算式にちょこっと変更を加えるだけでバーニングシップ・フラクタルを描くことができる、ということを知りました。
また、バーニングシップ・フラクタルとして取り上げられている図像が実は、細部のクローズアップであるということも知ったので、ここらでちょっとまとめたいと思います。

以前 wonderfl に掲載された、makc3d 先生の素敵なマンデルブロ描画コード、「if you’re in that kind of thing…」を fork させてもらって、普通のマンデルブロ集合図がバーニングシップ・フラクタル図になる様子を見てみましょう。

マンデルブロ集合

←はパラメータを変更して、全体像がより分かるようにした普通のマンデルブロ集合です。
19行目の offset_x を 0.0 から 30.0 へ、21行目の zoom を 1 から 0.5 へ変更。あと、62行目の末尾を 256 から 0x33 に変え、色の階調を落としました。

ところで、マンデルブロ集合は以下の漸化式で表現されるそうです。


Zn+1 = Zn^2 + c
Z0 = 0;

c というのは複素数で、Z の値が∞に発散しないような c の集合がマンデルブロ集合とのこと。
複素数は、実数部をX軸座標、虚数部をY軸座標の点に置き換えることができますが、上記の漸化式をXY平面の点に置き換えると以下の式になるそうです。


xn+1 = xn^2 - yn^2 + a
yn+1 = 2 * xn * yn + b

a というのは複素数 c の実数部、b というのは複素数 c の虚数部です(以上「wikipedia マンデルブロ集合」より)。

この計算式はmakc3d 先生のコードでは以下のように記述されています(107~110行目を修正して表示)。

zxx = zx * zx;
zyy = zy * zy;
if (zxx + zyy > 4) break;
zy = 2 * zx * zy + cy;
zx = zxx - zyy + cx;

バーニングシップ・フラクタルは xn+1、yn+1 を計算する際に、 xn、yn の絶対値にすると描かれる図形とのこと(「wikipedia バーニングシップ・フラクタル」より)なので、以下のように頭に2行付け加えればバーニングシップ・フラクタルになるはず。

if (zx < 0) zx = -zx;
if (zy < 0) zy = -zy;
zxx = zx * zx;
zyy = zy * zy;
if (zxx + zyy > 4) break;
zy = 2 * zx * zy + cy;
zx = zxx - zyy + cx;
バーニングシップ・フラクタル(遠景)

その結果が←です。
wikipedia バーニングシップ・フラクタルの一枚目の画像とだいたい同じですね。

ところでこの図像、燃えあがる船と言われても、えーどこがぁ? という感じ、ってゆうか、バーニングシップ・フラクタルで画像検索かけると出てくる図形と全然ちげくね?
実は、いわゆるバーニングシップ・フラクタルの図像は、このような全体図ではなく、赤く印をした部分のクローズアップなんだとか。

じゃあさっそく寄ってみましょうかね。

バーニングシップ・フラクタル(接近)

zoom = 3.0, offset_x = -190.0 にしてみます。

バーニングシップ・フラクタル(さらに接近)

さらに寄って zoom = 9.0, offset_x = -3450.0 にしてみました。

お、なんかイケてる図像が見えてきたじゃあないですか。

バーニングシップ・フラクタル(クローズアップ・船)

この左側の赤い印の部分をさらにクローズアップ(zoom = 23.0、offset_x = -9280.0、offset_y = -195.0)したのが←。
これよこれ、これぞまさしくバーニングシップ・フラクタル!
この forked code は wonderfl に投稿しました。

バーニングシップ・フラクタル(クローズアップ・塔)

また右側の赤い印の部分をさらにクローズアップ(zoom = 28.0、offset_x = -10450.0、offset_y = -195.0)すると←のとおり、なんか東南アジアの石造りの塔のような不思議な図形が現れたじゃあありませんか。

何て美しい。フラクタルって…… 萌える!



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