極座標を使用したマンデルブロ画像と、そのプログラムを以下に示す。下図の白部分がマンデルブロ集合である。(これは極座標の記事の最初に挙げるものだったが、ここで示しておく)
なお下図において表示画面の中央をマンデルブロ画像の重心の座標(-0.14,0)に一致させている。
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=1000: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
170 LOCATE 0,0:PRINT "J=";J
172 LOCATE 0,1:PRINT "始点(黒い円)の半径:R=";R
174 LOCATE 0,2:PRINT "マンデルブロ集合の中心点(赤点)=(-0.14,0)"
176 LOCATE 0,3:PRINT "C=N MOD 16 "
183 LOCATE 0,4:PRINT "Nmax=";NMAX
184 LOCATE 0,19:PRINT "RMAX=";RMAX
185 LOCATE 0,20:PRINT "dθ(度)="DTHDO
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
なお下図において表示画面の中央をマンデルブロ画像の重心の座標(-0.14,0)に一致させている。
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=1000: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
170 LOCATE 0,0:PRINT "J=";J
172 LOCATE 0,1:PRINT "始点(黒い円)の半径:R=";R
174 LOCATE 0,2:PRINT "マンデルブロ集合の中心点(赤点)=(-0.14,0)"
176 LOCATE 0,3:PRINT "C=N MOD 16 "
183 LOCATE 0,4:PRINT "Nmax=";NMAX
184 LOCATE 0,19:PRINT "RMAX=";RMAX
185 LOCATE 0,20:PRINT "dθ(度)="DTHDO
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