home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 1
/
FREEWARE.BIN
/
basic
/
fractal
/
frademo2.bas
< prev
next >
Wrap
BASIC Source File
|
1989-10-17
|
5KB
|
167 lines
100 '
110 ' F-BASIC386 SAMPLE PROGRAM % COPYRIGHT FUJITSU LIMITED 19890911
120 '
130 ' PUBLIC DOMAIN SOFTWARE by PRELUDE FMC(富士通マイコンクラブ)
140 '
150 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
160 ' ★ ソフト名:フラクタル・デモ PART2 V3 ★
170 ' ★ 登録名 :FRADEMO2.BAS ★
180 ' ★ 登録者 :PRELUDE(佐々木裕一) ★
190 ' ★ 動作確認:FM-TOWNS F-BASIC386 ★
200 ' ★ 備考 :このプログラムはビデオカード対応です。 ★
210 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
220 '
230 VIEW (0,0)-(319,239)
240 WINDOW (0,0)-(319,239)
250 SCREEN@ 1:SIMPOSE OFF
260 COLOR 6,0,0,4:CLS
270 '
280 PRINT" 1:Henon-Mira map"
290 PRINT" 2:Julia set of f(z)=z^2+a"
300 PRINT" 3:Henon map"
310 PRINT" 4:終了します。"
320 INPUT" 選択=> ";KY:ON KY GOSUB 380,940,1330,330:GOTO 230
330 *END
340 VIEW (0,0)-(319,239)
350 WINDOW (0,0)-(319,239)
360 END
370 '
380 *MIRA:CLS
390 '
400 ' % % % % % Henon-Mira map % % % % %
410 '
420 WI=35:R=56:COL=2
430 X0=0:Y0=.4!:A=-1.54!:B=-1
440 VIEW (40,0)-(319,239)
450 WINDOW (-WI,-WI)-(WI,WI)
460 ' LINE (-WI,-WI)-(WI,WI),PSET,7,B
470 DEF FNH(X)=-1+A*X+4*X*X/(1+X*X)
480 GOSUB *OPE
490 '
500 WHILE 1
510 X=Y0-FNH(X0):Y=B*X0
520 PSET(X,-Y),COL:X0=X:Y0=Y
530 IF ABS(X)+ABS(Y) > R THEN GOSUB *OVR
540 D$=INKEY$:IF D$<>"" THEN GOSUB *OPE
550 WEND
560 '
570 *OPE
580 IF D$="0" THEN COL=COL+1:IF COL=8 THEN COL=1
590 IF D$="1" THEN A=A+.001!
600 IF D$="2" THEN A=A-.001!
610 IF D$="A" THEN INPUT" A";A
620 IF D$="B" THEN INPUT" B";B
630 IF D$="X" THEN INPUT" X0";X0
640 IF D$="Y" THEN INPUT" Y0";Y0
650 IF D$="C" THEN CLS 5 'LINE (-WI,-WI)-(WI,WI),PSET,7,B
660 IF D$="E" THEN RUN 230
670 IF D$="R" THEN INPUT" R";R
680 IF D$="V" THEN GOSUB *VIDEO
690 IF D$="W" THEN INPUT" WI";WI:D$="":RETURN 450
700 CLS 4:COLOR 6:LOCATE 0,1
710 PRINT" 0:色COL=";COL;"+1"
720 PRINT" 1:定数A+=";A+.001!
730 PRINT" 2:定数A-=";A-.001!
740 PRINT" A:定数A=";A
750 PRINT" B:定数B=";B
760 PRINT" X:変数X=";X0
770 PRINT" Y:変数Y=";Y0
780 PRINT" C:画面消去"
790 PRINT" E:終了"
800 PRINT" R:発散値R=";R
810 PRINT" V:録画:空白で戻る"
820 PRINT" W:窓WI=";WI
830 RETURN
840 '
850 *OVR:CLS 4:LOCATE 0,6:COLOR 2:PRINT" 発散!"
860 PRINT" 空白キーを押して下さい!"
870 A=-1.54!:B=-1:X0=0:Y0=.4!:COL=COL+1:COL=COL MOD 8:CLS 5
880 RETURN
890 '
900 *VIDEO
910 SIMPOSE ON 0
920 D$=INKEY$:IF D$="" GOTO 920 ELSE SIMPOSE OFF:RETURN
930 '
940 *JULIA:CLS
950 '
960 ' % % % % % julia set of f(z)=z^2+a % % % % %
970 '
980 AR=-.74543!:AI=-.11301!:COL=2
990 RX=319:RY=239
1000 XS=-2:XE=2:YS=-1.4!:YE=1.4!
1010 XD=RX/(XE-XS):YD=RY/(YE-YS)
1020 ZX=.25!-AR:ZY=-AI
1030 R=.5!*(SQR(ZX*ZX+ZY*ZY)+ZX)
1040 ZY=SGN(ZY)*SQR(ABS(R-ZX)):ZX=SQR(ABS(R))
1050 ZX=ZX+.5!:GOSUB *OPE2
1060 ' LINE (0,0)-(319,239),PSET,7,B
1070 '
1080 WHILE 1
1090 ZX=ZX-AR:ZY=ZY-AI
1100 R=.5!*(SQR(ZX*ZX+ZY*ZY)+ZX)
1110 ZY=SGN(ZY)*SQR(ABS(R-ZX)):ZX=SQR(ABS(R))
1120 IF RND>.5! THEN ZX=-ZX:ZY=-ZY
1130 PSET (INT((ZX-XS)*XD),INT((YE-ZY)*YD)),COL
1140 D$=INKEY$:IF D$<>"" THEN GOSUB *OPE2
1150 WEND
1160 '
1170 *OPE2
1180 IF D$="0" THEN COL=COL+1:COL=COL MOD 8
1190 IF D$="1" THEN INPUT" AR";AR
1200 IF D$="2" THEN INPUT" AI";AI
1210 IF D$="C" THEN CLS 5 ' LINE (0,0)-(319,239),PSET,7,B
1220 IF D$="E" THEN RUN 220
1230 IF D$="V" THEN GOSUB *VIDEO
1240 CLS 4:COLOR 6:LOCATE 0,1
1250 PRINT" 0:色COL=";COL;"+1"
1260 PRINT" 1:定数AR=";AR
1270 PRINT" 2:定数AI=";AI
1280 PRINT" C:画面消去"
1290 PRINT" E:終了"
1300 PRINT" V:録画:空白で戻る"
1310 RETURN
1320 '
1330 *HENON1
1340 SCREEN@ 0:COLOR 6,0,0,0:CLS
1350 LOCATE 1,22:PRINT" E:終了"
1360 WINDOW (0,0)-(639,479):VIEW (0,0)-(639,479)
1370 '
1380 ' % % % % % HENON MAP % % % % %
1390 '
1400 A=1.4!:B=.3!:XC=.83!:YC=.15!:VC=99.5!
1410 DIM C(3),D(3),W(3,3),V(3,3)
1420 D(0)=2.5!:D(1)=.4!:D(2)=.08!:D(3)=.0125!
1430 C(0)=XC:C(1)=YC:C(2)=XC:C(3)=YC
1440 FOR I=0 TO 3:FOR J=0 TO 3
1450 W(I,J)=C(J)+(2*INT(J/2)-1)*D(I)
1460 READ V(I,J)
1470 NEXT J:NEXT I
1480 '
1490 FOR I=0 TO 2
1500 WINDOW(W(I,0),W(I,1))-(W(I,2),W(I,3))
1510 VIEW(V(I,0),V(I,1))-(V(I,2),V(I,3))
1520 LINE(W(I,0),W(I,1))-(W(I,2),W(I,3)),PSET,1,B
1530 LINE(W(I+1,0),W(I+1,1))-(W(I+1,2),W(I+1,3)),PSET,1,BF
1540 NEXT I
1550 WINDOW(W(3,0),W(3,1))-(W(3,2),W(3,3))
1560 VIEW(V(3,0),V(3,1))-(V(3,2),V(3,3))
1570 LINE(W(3,0),W(3,1))-(W(3,2),W(3,3)),PSET,1,BF
1580 '
1590 X=1:Y=1
1600 FOR K=0 TO 20
1610 XX=1+Y-A*X*X:YY=B*X:X=XX:Y=YY
1620 NEXT K
1630 '
1640 *HENON
1650 XX=1+Y-A*X*X:YY=B*X
1660 FOR I=0 TO 3
1670 WINDOW(W(I,0),W(I,1))-(W(I,2),W(I,3))
1680 VIEW(V(I,0),V(I,1))-(V(I,2),V(I,3))
1690 PSET(XX,YY),2:D$=INKEY$:IF D$="E" THEN RETURN
1700 NEXT I
1710 X=XX:Y=YY:K=K+1
1720 GOTO *HENON
1730 DATA 0,0,199,199,200,0,399,199
1740 DATA 0,200,199,399,200,200,399,399
1750 '