前記事262で、マンデルブロ集合の縁の画像を求める一例を説明した。
この方法での縁の座標データをdata file化しておき、それを順次読みだして点列画像を求めるプログラムを作り、画像を求めた。
***
このプログラムは最後に参考として書いておくが、要点だけ先に説明しておく。
要するに、巡回ループを貫通してしまう場合は、その時点の過去の点列は赤く表示する(『貫通点列』)。また、巡回ループを脱出する場合は、その時点の過去の点列を青く表示する(『ブッダブロ点列』。
***
下図が、このプログラムの実行結果である。
------------------------
上図から分かるように、表示されたのは青い『ブッダブロ点列』のみである。
赤い『貫通点列』は一つも見いだせない。
***
前記事にも書いたように、この画像で使用したマンデルブロ集合の縁画像は真のマンデルブロ集合の縁の外側にある。
***
マンデルブロ集合の真の縁とは数学的には巡回ループを脱出するには無限回の巡回を必要とする点(K,J)の集合だろう。
そのような真の縁を具体的に実現するのは不可能だが、可能だとして、その理想化された点(K,J)では点列は、やはり『ブッダブロ点列』を示すと思われるが、もし、その理想化された点(K,J)に対して点(K-ε,J-ε)では『貫通点列』となるのだろうか?
(ここで、εは任意の小さな数である)
***
実はマデルブロ集合内部でも、『ブッダブロ点列』自体は存在する。
そもそも『ブッダブロ画像』とは、その典型である。
下図はその一例である。始点は乱数で与えている。そもそもブッダブロ画像はマンデルブロ集合内部の点列の画像でもあるのだから。
***
問題は、『ブッダブロ点列』を生成する始点がマンデルブロ集合内(縁も含めて)に存在するのか、ということである。
定義からして、『ブッダブロ点列』とは巡回ループを脱出した始点での過去の点列であり、マンデルブロ集合とは巡回ループを脱出しない始点の集合であるから、存在しないように思える。あたりまえのことか!?
***
以下は参考のために、ここで使用したBASIC/98のプログラムを下記しておく。
***
10 REM マンデルブロ集合の縁(ふち)data file:DATAマンデルAを順次読みだして
12 REM 点列を求める。重ね描きする。
14 RRM 『貫通点列』→赤、『ブッダブロ点列』→青 とする。
190 CONSOLE ,,0,1
210 COLOR 0,7,,,2
230 CLS 3
250 CXS=-1.5:CXE=0.5:DX=(CXE-CXS)/480
270 CYS=-1:CYE=1:DY=(CYE-CYS)/480
290 I=0:II=0:N1=0:NN=0
294 DIM SX(10000):DIM SY(10000):DIM Z1(480,480):DIM Z2(480,480)
330 CHAIN MERGE "C:\BASIC1\PRO\SUBR\ER2.BAS",350,ALL
350 ON ERROR GOTO 50000
370 REM マンデルブロ集合の縁(ふち)の表示
390 OPEN "C:\BASIC1\TEST\DATA3B.DAT" FOR INPUT AS #1
392 OPEN "C:\BASIC1\TEST\DATAK.DAT" FOR OUTPUT AS #2
394 OPEN "C:\BASIC1\TEST\DATAD.DAT" FOR OUTPUT AS #3
410 INPUT #1,KK,JJ,K,J
430 IF EOF(1) THEN 2030
440 LOCATE 0,0:PRINT USING "###";K
441 LOCATE 0,1:PRINT USING "###";J
450 PSET (K,J),15
570 CX=CXS+DX*K
580 CY=CYS+DY*J
610 '
1270 REM 画像の作成
1290 L=0
1410 REM N-loopの計算
1430 X=0:Y=0
1450 FOR N=0 TO 500
1470 XX=X^2-Y^2+CX
1490 Y=2*X*Y+CY
1510 X=XX
1530 Q=X^2+Y^2
1550 SX(L)=X: SY(L)=Y
1570 IF Q>4 THEN 1900
1610 L=L+1
1630 NEXT N
1634 FOR N=0 TO 500
1750 X=SX(N):Y=SY(N)
1770 K1=(X-CXS)/DX : J1=(Y-CYS)/DY
1790 IF K1<0 OR J1<0 THEN 1910
1810 IF K1>480 OR J1>480 THEN 1910
1830 K=INT(K1) : J=INT(J1)
1832 Z1(K,J)=Z1(K,J)+1
1836 WRITE #2,K,J,Z1(K,J)
1852 PSET (K,J),2
1853 NEXT N
1858 L=0:GOTO 410
1900 REM N-loop脱出後
1910 FOR LL=0 TO L
1920 X=SX(LL):Y=SY(LL)
1930 KK=(X-CXS)/DX : JJ=(Y-CYS)/DY
1940 IF KK<0 OR JJ<0 THEN 2000
1950 IF KK>480 OR JJ>480 THEN 2000
1960 K=INT(KK) : J=INT(JJ)
1970 '
1974 Z2(K,J)=Z2(K,J)+1
1978 WRITE #3,K,J,Z2(K,J)
1980 PSET (K,J),1
2000 NEXT LL
2010 L=0
2020 GOTO 410
2030 CLOSE
2040 LINE(0,0)-(480,0),0,,2
2050 END