PCが描く奇妙な画像集(数学的万華鏡と生物形態等の世界)

・インタープリタBASICによるフラクタルとカオスの奇妙な画集。

282乱数を使ったブッタブロ画像(その2)

2014-07-21 13:33:33 | ブッダブロー画像
乱数を使わないブッダブロ画像については前記事で調べてきた。
今回は、始点に乱数を使う本来の画像について再度試みた。(記事277も乱数を使っている)

Wikipedia掲載の簡単な解説に従って、BASIC/98でプログラミングしているのだが、今回、巡回回数を21万回(記事277では10万回)の画像を作ったが、どうもWikipedia掲載の画像のような画像が得られない。尤も、BASIC/98では色の濃淡が表現できず、16色の色でしか濃度:mを表せないから、その点が画像の微細な表現が出来ないのは仕方ない。

***
下図は今回作った画像の中央部を縦に切ったときのm( 正確には、2*LOG(m) )の分布図である。mのダイナミックレンジは、0~2*LOG(m)=15以上、即ち、m は 0 からe^15/2=1808以上もある。この図を、よく見ると、画像を構成しているmは、0から約1800以上の間に散在している。この散在したmの分布を16色で表現しようとすること自体無理があり、画像の微細さが表現できないのは当然と言える。



下図は、C=2*LOG(m)の画像である。巡回回数は21万回で、Nmax=500とした。



BASIC/98の色コードは、8以上は簡単には区別できない色で構成されているる。
そこで比較的区別しやすい、0~7のみ使用するため、C=2*LOG(m) MOD 7 とした画像が下図である。



これらの画像において、画像の微細さが表現できないのは、使用ツール(BASIC/98)の限界に依るのは仕方ないとしても、ちょっと理解できないのは、Wikipedia掲載の画像と根本のところで異なっているように見えることだ。

むしろ、前回の乱数を使用しない方法の画像(記事277の画像)のほうが、Wikipedia掲載の画像に近い。それらの画像で異なる点は始点の与え方のみであり、他の計算手順は全く同じである。

***
今回の画像において、乱数の与え方に問題があるのだろうか?

今回の画像において前回同様に、乱数はRND コマンドを使い、始点Z(X,Y)は、画像表示範囲を
Xs~Xe,Ys~Yeとすると、X=(Xe-Xs)RND-Xs,Y-(Ye-Ys)RND-Ys とした。

***
参考のために、BASIC/98での画像作成と表示のプログラムを以下に掲載しておく。

10 REM ブッダブロ画像作成プログラム
110 CONSOLE ,,0,1
120 COLOR 0,7,,,2
130 CLS 3
140 '
144 RANDOMIZE 50
180 CXS=-1.4 :CXE=0.6 :DX=(CXE-CXS)/480
190 CYS=-1 :CYE=1 :DY=(CYE-CYS)/480
200 M=1 :L=0
202 DIM Z(480,480):DIM SX(10000):DIM SY(10000)
204 FOR J=0 TO 480
206 FOR K=0 TO 480
208 Z(K,J)=0
210 NEXT K,J
212 K=0:J=0
228 OPEN "C:\BASIC1\TEST\DATA.DAT" FOR OUTPUT AS #3
248 REM CX,CY given
250 CY=2*RND-1
260 CX=2*RND-1.4
262 REM M:最大反復回数
264 IF M=1.2*10^6 THEN 600
266 LOCATE 0,0:PRINT M
270 X=0:Y=0
288 FOR N=1 TO 500
290 XX=X^2-Y^2+CX
300 Y=2*X*Y+CY
310 X=XX
320 Q=X^2+Y^2
324 IF Q>4 THEN 400
328 SX(L)=X: SY(L)=Y
330 L=L+1
340 NEXT N
350 GOTO 248
400 REM
411 IF N=1 THEN 590
420 FOR LL=0 TO L
422 X=SX(LL):Y=SY(LL)
444 KK=(X-CXS)/DX : JJ=(Y-CYS)/DY
445 IF KK<0 OR JJ<0 THEN 460
446 IF KK>480 OR JJ>480 THEN 460
448 K=INT(KK) : J=INT(JJ)
450 Z(K,J)=Z(K,J)+1
452 C= N MOD 16
454 PSET (K,J),C
460 NEXT LL
464 L=0
590 M=M+1:GOTO 248
600 REM DATA FILE の作成
610 FOR JJJ=0 TO 480
620 FOR KKK=0 TO 480
630 IF Z(KKK,JJJ)=0 THEN 650
640 WRITE #3,KKK,JJJ,Z(KKK,JJJ)
650 NEXT KKK
660 NEXT JJJ
670 END
*****************
10 REM ブッダブロ表示(K,J,Zmax)デタの表示プログラム
30 CONSOLE ,,0,1
40 COLOR 0,7,,,2
50 CLS 3
58 OPEN "C:\BASIC1\TEST\DATA.DAT" FOR INPUT AS #1
60 INPUT #1,K,J,Z
70 IF EOF(1) THEN 120
80 REM Zによる色の区別:サブルーチン
90 GOSUB 1000
100 PSET (J,K),C
110 GOTO 60
120 CLOSE #1
140 END
1000 REM Zによる色の区別
1010 IF Z=0 THEN 2000
1020 C=2*LOG(Z)
2000 RETURN








最新の画像もっと見る