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

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

289 マウスをクリックして始点を選ぶ方法

2014-07-22 07:38:11 | ブッダブロー画像
ブッダブロ点列 (巡回ループを脱出した時点で過去全ての点列)と貫通点列 (巡回ループを脱出できず貫通した時点で過去全ての点列)の画像作成時の始点は、いままで乱数を使うか、あるいは表示座標を全て順次与えていく方法であった。

***
この方法では調べたい点での、それらの点列の様子を調べるには不便であり、始点と、点列の関係もよく分からない。

そこで、あらかじめマンデルブロ集合の縁(ふち)を表示しておき、その縁ないしマンデルブロ集合内部の点を、マウスを使って自由に選び、その点での点列を表示させるプログラムを作った。

***
以下の画像は、そのプログラムによる点列画像である。
表示範囲は実軸:-1.5<X<0.5,虚軸:-1<Y<1である。最大巡回回数は500とした。
赤色の点列は貫通点列で、青色の点列はブッダブロ点列である。









-----------------------------------------------------------
この方法で分かったことは、マウスでクリックした点とは全く別の座標に点列が
表れる場合が多いということ。

***
当然なことではあるが、マンデルブロ集合部ではブッダブロ点列を生成する始点よりも、貫通点列を生成する始点のほうが圧倒的に多いということ。

そもそも、マンデルブロ画像の内部ないし縁(ふち)は、巡回ループを脱出しない点、ないしは巡ループを脱出するのに巡回回数が無限大となる点の集合だから、ループを貫通してしまうのは当然である。即ち、貫通点列となるのは当然である。

***
しかし、たまにはブッダブロ点列を生成する点もある。比較的に、それが多いのは上図の最後の画像で示しているように、マンデ゛ルブロ集合の『尻』の辺りの点である。理由はよく分からない。

***
参考に、BASIC/98で作った、このプログラムを下記しておく。

10 REM 始点をマウスで入力:マンデルブロ+ブッダブロの点列の表示
90 REM 始点のマウス入力はマウスの左ボタンをクリック。
110 REM 始点の入力の終わりにはキーF1を押す。行82
130 REM 表示座標点→行112,114
150 REM 表示座標→行250,270:変えた場合はマンデルブロ集合画像の縁(ふち)画像も変えること。
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)
330 CHAIN MERGE "C:\BASIC1\PRO\SUBR\ER2.BAS",350,ALL
350 ON ERROR GOTO 50000
370 REM マンデルブロ集合の縁(ふち)の表示
390 OPEN "C:\BASIC1\TEST\DATAマンデルA.DAT" FOR INPUT AS #1
410 INPUT #1,K,J,C
430 IF EOF(1) THEN 490
450 PSET (K,J),0
470 GOTO 410
490 CLOSE #1
492 ON KEY GOSUB *KEY1
494 KEY(1) ON
500 ON MOUSE(2) GOSUB *M1
510 MOUSE (2) ON
520 '
530 DO:AA=AA:LOOP
540 '
550 *M1
560 A=MOUSE(4,1):B=MOUSE(5,1)
570 CX=CXS+DX*A
580 CY=CYS+DY*B
610 PSET (A,B),2
620 GOSUB 1270
650 RETURN
1270 REM 画像の作成
1290 L=0
1330 K=0:J=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)
1852 PSET (K,J),2
1853 NEXT N
1858 GOTO 2020
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 C= M MOD 16
1980 PSET (K,J),1
2000 NEXT LL
2010 L=0
2020 RETURN
2030 *KEY1
2040 LINE(0,0)-(480,0),0,,2
2050 END




最新の画像もっと見る