2015年6月9日火曜日

459 マンデルブロー画像について

マンデルブロー画像の定義

『ある任意の複素関数をf(Z)+Cとする。Cは複素数でRe.C=CX,Im.C=CYとする。
ある複素画面領域の点(CX,CY)において、Z=X+iYとしてf(Z)+Cを下のフロー図のように計算を行う。
この計算手順を満足したとき点(CX,CY)に色をつけて表示する。この手順をCの複素画面領域の全てについて行い画像を完成させる。』

下図はマンデルブロー画像作成のプログラム・フロー図である。

上記のマンデルブロー画像の定義において、f(Z)=Z^2 の場合、Z^2マンデルブロー画像と言う
ことにする。 下図がZ^2マンデルブロー画像の例である。


上図に於いて、色は、N-loop 脱出時の N を No としたとき、色:C=No mod 16 とし、
C はBASIC/98の色コード番号であり、その色とする。但し、C=7(白)の場合は、C=8(灰色)
としている。また、N=1~500 としている。上図において、C=7(白)部分が、いわゆる
マンデルブロー集合の部分である。

以下に、参考として、N88BASICでのプログラムを示す(注:BASIC/98でも画像作成部は全く
同じである)

なお、行60のサブルーチン:KOSHKIについては、記事5を参照。

10 REM Z^2マンデルブロー 
20 REM 横軸(K):640 dots、縦軸(J):480 dots
60 CHAIN MERGE "C:\BASIC1\PRO\SUBR\KOSHIKI.BAS",90,ALL
90 CHAIN MERGE "C:\BASIC1\PRO\SUBR\ER1.BAS",100,ALL
100 ON ERROR GOTO 50000
110 CONSOLE ,,0,1
120 COLOR 0,7,,,2
130 CLS 3
140 GOSUB 10000
170 REM 画像表示範囲の設定
180 CXS=-2.5 :CXE=0.5 :CYS=-(CXE-CXS)*480*0.5/640
190 DX=(CXE-CXS)/640 :DY=DX:CYE=CYS+480*DY
200 REM 画像の作成と表示
220 FOR J=0 TO 480
240 FOR K=0 TO 640
250 X=0 :Y=0
260 CX=CXS+DX*K
270 CY=CYS+DY*J
280 FOR N=1 TO 500
290 XX=FNR2(X,Y)+CX
300 Y=FNI2(X,Y)+CY
310 X=XX
320 Q=X^2+Y^2
330 IF Q>4 THEN 370
340 NEXT N
350 '収束時(マンデルブロー集合→白色となる)。そのまま、next K。
360 GOTO 420
370 '発散時のPSET
380 C=N MOD 16
390 IF C=7 THEN C=8
400 PSET (K,J),C
420 NEXT K
430 NEXT J
440 END