下図は極座標表示のマンデルブロ画像である。これから此の画像に関連する話題に転ずるので極座標におけるマンデルブロ画像について復習しておく。
----------------------------------------------------------------------
記事583で詳説したように、巡回式:Z←Z^2+Cは、点列(1)で表される。ここで、Cは複素定数。
Z0,Z1,Z2,・・・,Zn,・・・Zmax ・・・・・・・・・・・・・・・・・・・・・・・(1)
ここで、Z0=C とする。
複素平面での表示領域:Dを極座標とする。
極座標での点は、座標の中心点からの距離:Rと角度θで決定される。
ここで、Rとθの変化率を dr,dθとし、パラメータ K,Jを使用して、点Z(θ,R)を下式で与える。
θ=dθ*K ,R=dr*J
ここで表示領域:D内の点C(=Z0)が与えられたとき、点列(1)はどのような挙動をするのだろうか?
これが、次回以降のテーマであるが、それには極座標を用いるのがよい。
画像を鮮明にするには、dθ,dRを小さくするのがよいが、画像作成時間との兼ね合いがある。
C.K.クリックオーバー著『コンピューター・カオス・フラクタル』によれば、マンデルブロ集合の重心は(-0.14,0)だそうである。
ここで重心の定義は不明だが、(1)の点列の挙動をしらべるとき、その点列座標の中心を此の重心と一致させて調べることにする。
---------------------------------------
参考にBASIC/98のプログラムを書いておく。
10 REM マンデルブロ画像 極座標表示
12 CHAIN MERGE "C:\BASIC\PRO\SUBR\COLOR右上表示.BAS",50,ALL
50 CHAIN MERGE "C:\BASIC\PRO\SUBR\KOSHIKI.BAS",80,ALL
80 CHAIN MERGE "C:\BASIC\PRO\SUBR\ER1.BAS",90,ALL
90 ON ERROR GOTO 50000
91 CONSOLE ,,0,1
92 COLOR 0,7,,,2
93 CLS 3
94 GOSUB 10000
104 GOSUB 3000
110 OPEN"C:\BASIC1\TEST\マンデルブロ画像DATA.DAT" FOR OUTPUT AS #1
120 JMAX=240:KMAX=4000:RMAX=1.36:X0=-0.14:Y0=0
130 DR=RMAX/JMAX:DTH=2*P/KMAX:AA=JMAX/RMAX:NMAX=100
132 CXS=-1.5:D=RMAX/320:CYS=-240*D:DTHDO=180*DTH/P
150 FOR J=1 TO 240
160 R=J*DR
190 FOR K=0 TO KMAX
200 TH=K*DTH:THH=TH
210 CX=R*COS(TH)+X0
220 CY=R*SIN(TH)+Y0
221 X=0:Y=0
230 FOR N=0 TO NMAX
240 X1=X
250 X=FNR2(X,Y)+CX
260 Y=FNI2(X1,Y)+CY
270 Q=X^2+Y^2
280 IF Q>4 THEN 320
310 NEXT N
315 GOTO 390
320 REM
322 X=R*COS(TH)+X0:Y=R*SIN(TH)+Y0
324 K1=(X-CXS)/D:J1=(Y-CYS)/D
326 IF K1<0 OR J1<0 THEN 390
328 IF K1>640 OR J1>480 THEN 390
330 C=N MOD 16
332 IF C=7 THEN C=8
334 PSET (K1,J1),C
336 WRITE #1,K1,J1,C
390 NEXT K
394 NEXT J
400 CLOSE
500 PSET(320,240),2
520 END
----------------------------------------------------------------------
記事583で詳説したように、巡回式:Z←Z^2+Cは、点列(1)で表される。ここで、Cは複素定数。
Z0,Z1,Z2,・・・,Zn,・・・Zmax ・・・・・・・・・・・・・・・・・・・・・・・(1)
ここで、Z0=C とする。
複素平面での表示領域:Dを極座標とする。
極座標での点は、座標の中心点からの距離:Rと角度θで決定される。
ここで、Rとθの変化率を dr,dθとし、パラメータ K,Jを使用して、点Z(θ,R)を下式で与える。
θ=dθ*K ,R=dr*J
ここで表示領域:D内の点C(=Z0)が与えられたとき、点列(1)はどのような挙動をするのだろうか?
これが、次回以降のテーマであるが、それには極座標を用いるのがよい。
画像を鮮明にするには、dθ,dRを小さくするのがよいが、画像作成時間との兼ね合いがある。
C.K.クリックオーバー著『コンピューター・カオス・フラクタル』によれば、マンデルブロ集合の重心は(-0.14,0)だそうである。
ここで重心の定義は不明だが、(1)の点列の挙動をしらべるとき、その点列座標の中心を此の重心と一致させて調べることにする。
---------------------------------------
参考にBASIC/98のプログラムを書いておく。
10 REM マンデルブロ画像 極座標表示
12 CHAIN MERGE "C:\BASIC\PRO\SUBR\COLOR右上表示.BAS",50,ALL
50 CHAIN MERGE "C:\BASIC\PRO\SUBR\KOSHIKI.BAS",80,ALL
80 CHAIN MERGE "C:\BASIC\PRO\SUBR\ER1.BAS",90,ALL
90 ON ERROR GOTO 50000
91 CONSOLE ,,0,1
92 COLOR 0,7,,,2
93 CLS 3
94 GOSUB 10000
104 GOSUB 3000
110 OPEN"C:\BASIC1\TEST\マンデルブロ画像DATA.DAT" FOR OUTPUT AS #1
120 JMAX=240:KMAX=4000:RMAX=1.36:X0=-0.14:Y0=0
130 DR=RMAX/JMAX:DTH=2*P/KMAX:AA=JMAX/RMAX:NMAX=100
132 CXS=-1.5:D=RMAX/320:CYS=-240*D:DTHDO=180*DTH/P
150 FOR J=1 TO 240
160 R=J*DR
190 FOR K=0 TO KMAX
200 TH=K*DTH:THH=TH
210 CX=R*COS(TH)+X0
220 CY=R*SIN(TH)+Y0
221 X=0:Y=0
230 FOR N=0 TO NMAX
240 X1=X
250 X=FNR2(X,Y)+CX
260 Y=FNI2(X1,Y)+CY
270 Q=X^2+Y^2
280 IF Q>4 THEN 320
310 NEXT N
315 GOTO 390
320 REM
322 X=R*COS(TH)+X0:Y=R*SIN(TH)+Y0
324 K1=(X-CXS)/D:J1=(Y-CYS)/D
326 IF K1<0 OR J1<0 THEN 390
328 IF K1>640 OR J1>480 THEN 390
330 C=N MOD 16
332 IF C=7 THEN C=8
334 PSET (K1,J1),C
336 WRITE #1,K1,J1,C
390 NEXT K
394 NEXT J
400 CLOSE
500 PSET(320,240),2
520 END