マンデルブロー・ジュリア集合

JavaScriptによるマンデルブロー集合・ジュリア集合の描画プログラムの焼き直し版。

概要

2011/06/26

JavaScriptでマンデルブロー集合をCanvasを用いて書き直したコンテンツ。ジュリア集合も追加。

このページでは数式表示にMathML、フラクタルの描画にJavaScript,Canvasを使用している。数式を表示できないブラウザは左側のMathML切替で代替画像に切り替えることができる。

マンデルブロー集合

2011/06/26

古いスクリプトをCanvas用に作り直したもの。描画速度が大幅に上がり、最大解像度は384pxから864pxになった。使い方は変わらず。

数式

複素数列Z、複素数CとしてZnを次のように定義する。

Z n = Z n - 1 p + C
C = a + b
Z 0 = 0

複素数Cをガウス平面上の一点(a,b)としてZnを計算し、値が収束した(a,b)の集合をマンデルブロー集合と呼ぶ。収束判定はZnの絶対値が2を超えないかどうかで決定する。

最も一般的なp=2(2次式)のときを考えてみる。複素数Znを次のように実数と虚数で表す。

Z n = X n + Y n

これを漸化式に代入し、実数と虚数を分離した漸化式を得る。

X n + Y n = X n - 1 2 - Y n - 1 2 + a + 2 X n - 1 Y n - 1 + b
X n = X n - 1 2 - Y n - 1 2 + a
Y n = 2 X n - 1 Y n - 1 + b

ガウス平面上の(a,b)に対して、初期値(X0,Y0)=(0,0)から上記の漸化式を求め、絶対値の二乗Xn 2+Yn 2がXn 2+Yn 2>4であるかを判定し、適当な回数漸化式の計算と判定を繰り返す。発散しなかったものがマンデルブロー集合であり、発散時のnの値に応じて色をつけることで美しい図形が描かれる。

スクリプト

入力フォーム

マンデルブロー集合:

拡大倍率
X4.00 X2.00 X1.00 X0.50 X0.25
解像度(25*33)
96 144 216 288 432 864
ループ回数(高倍率時に精度を上げる)
64 128 256 512 1024 2048 4096
カラーパレット
八色固定 ループ回数依存 同一色系統 八色可変 HSLA HSLA2
描画フィールド Canvas Field
情報/デバッグ
状態
中心座標
x:
y:
倍率(中心座標からの描画範囲)
Debug(Cost)
ms

ジュリア集合

2011/06/26

ジュリア集合は、マンデルブロー集合のある固定座標(i,j)を定数C(i,j)として座標(a,b)における漸化式の収束を求めるものだ。マンデルブロー集合の1つの座標が1つのジュリア集合に対応するので、座標を直感的に入力できるように216×216マスのマンデルブロー集合をクリックすることで入力できるようになっている。

入力に使う固定サイズのマンデルブロー集合も設定フォームのループ回数や拡大倍率に対応し、拡大モードとジュリア集合入力モードを切り替えられる。マンデルブロー集合から入力されるジュリア集合の初期倍率は1倍で固定。

マンデルブロー集合と異なり解像度変更で再描画されない。

数式

マンデルブロー集合とジュリア集合は裏表の関係にある。マンデルブロー集合はあるガウス平面上の座標(a,b)を次のような設定で漸化式を計算した。

Z n = Z n - 1 p + C
C = a + b
Z 0 = 0

これに対しジュリア集合では、Z0を0ではなくガウス平面上の点(a,b)、定数Cにはマンデルブロー集合上でのガウス平面上の1点を定数として入力して、後はマンデルブロー集合と同じように漸化式を求め収束したZ0の集合をジュリア集合と呼ぶ。つまりCを固定してZ0を変化させる。

ジュリア集合の漸化式と初期値は次のようになる。ただしマンデルブロー集合のガウス平面上の点(固定点)を(i,j)とする。

Z n = Z n - 1 p + C
C = i + j
Z 0 = a + b

前述のように、ジュリア集合はマンデルブロー集合の座標の数だけバリエーションがある。

スクリプト

設定フォーム
拡大倍率
X4.00 X2.00 X1.00 X0.50 X0.25
解像度(25*33)
96 144 216 288 432 864
ループ回数(高倍率時に精度を上げる)
64 128 256 512 1024 2048 4096
カラーパレット
八色固定 ループ回数依存 同一色系統 八色可変 HSLA HSLA2
描画フィールド

マンデルブロー拡大 ジュリア集合描画

Canvas Field

マンデルブロー集合のパラメータ:(0,-0.5,x1)

ジュリア集合の初期値C:(+ i)

Canvas Field

ジュリア集合のパラメータ:(0,0,x1)

Cost:ms