10 REM ******************** 20 REM Fractal Pack v 1.0 30 REM By Ashwin Wavde 40 REM Ashwin@i7mail.com.au 50 REM ******************** 60 REM NC100/200 Version 70 REM Downloaded from Tim's Amstrad NC Users' Site 80 REM http:\\www.ncus.org.uk 90 : 100 REM Sierpinski Triangle - 5/12/01 110 REM Dragon Fractal - 6/12/01 120 REM Fern Fractal - 10/12/01 130 REM Full Program - Final - 15/12/01 140 : 150 CLS: ON ERROR PROC_Quit: RUN 160 PRINT " ²²²² ²² ±±± ±± ° ° " 170 PRINT " ² ² ²² ² ±± ± ± ± °° ° ° " 180 PRINT " ²²² ²² ²² ± ±±± ±± ° °° " 190 PRINT " ² ² ² ² ± ± ± ± ° ° ° " 200 PRINT " ² ² ² ² ±± ± ± ± °° ° ° " 210 VDU 14: PRINT TAB(9,6) "V 1.0 By Ashwin Wavde": VDU 15 220 VDU 17: PRINT TAB(49,0) "Choose a Fractal": VDU 18 230 PRINT TAB(43,2) "¯ Sierpinski Triangle" 240 PRINT TAB(45,6) "Fern Fractal" 250 PRINT TAB(45,4) "Dragon Fractal": pos=2 260 G=GET 270 IF G=240 AND pos>2 PROC_Up(pos): pos=pos-2:GOTO 260 280 IF G=241 AND pos<6 PROC_Down(pos): pos=pos+2:GOTO 260 290 IF G=13 AND pos=2 PROC_Sierpinski 300 IF G=13 AND pos=4 PROC_Dragon 310 IF G=13 AND pos=6 PROC_Fern 320 GOTO 260 330 DEF PROC_Up(pos) 340 PRINT TAB(43,pos) " ": PRINT TAB(43,pos-2) "¯" 350 ENDPROC 360 DEF PROC_Down(pos) 370 PRINT TAB(43,pos) " ": PRINT TAB(43,pos+2) "¯" 380 ENDPROC 390 DEF PROC_Sierpinski 400 CLS: X=RND(10)/10: Y=RND(10)/10 410 FOR K=1TO1500 420 N=RND(10)/10 430 IF N<=1/3: X=.5*X: Y=.5*Y 440 IF N>1/3 AND N<=2/3: X=.5*(.5+X): Y=.5*(1+Y) 450 IF N>2/3: X=.5*(1+X): Y=.5*Y 460 PROC_PutPoint(X,Y,1,1) 470 NEXT 480 PROC_Done 490 ENDPROC 500 DEF PROC_Dragon 510 CLS: X=0:Y=0 520 FOR N=1TO1000 530 P=RND(10)/10 540 IF P<.5: GOTO 650 550 IF P>.5: GOTO 660 560 R=(A*X)+(B*Y)+C 570 S=(D*X)+(E*Y)+F 580 U=(3.2*R)+2.5 590 V=(4.2*S)+6.5 600 PROC_PutPoint(U,V,10,1) 610 X=R:Y=S 620 NEXT 630 PROC_Done 640 END 650 A=.5: B=.5: C=0: D=-.5: E=.5: F=0: GOTO 560 660 A=-.5: B=.5: C=2: D=-.5: E=-.5: F=0: GOTO 560 670 ENDPROC 680 DEF PROC_Fern 690 CLS 700 A=25: B=25: C=RND(10)/10: D=RND(10)/10 710 FOR J=1TO450 720 U=8*(A+D)-1: V=16*(B+C)+20 730 PROC_PutPoint(U,V,50,1.5) 740 Z=RND(100)/100 750 R=0.85: S=0.85: A=0.0436: B=0.0436: K=1 760 IF Z<0.005: GOTO 850 770 IF Z<0.1025: GOTO 860 780 IF Z<0.2: GOTO 870 790 E=R*C*COS(A)-S*D*SIN(B) 800 F=R*C*SIN(A)+S*D*COS(B)+K 810 C=E: D=F 820 NEXT 830 PROC_Done 840 END 850 R=0: S=0.16: A=0: B=0: K=0: GOTO 790 860 R=0.3: S=0.34: A=0.8552: B=0.8552: K=1.6: GOTO 790 870 R=0.3: S=0.37: A=2.09441: B=-0.8552: K=0.44: GOTO 790 880 ENDPROC 890 DEF PROC_Done 900 PRINT "Done...well that's about as good" 910 PRINT "as it WILL look!" 920 ENDPROC 930 DEF PROC_PutPoint(xx,yy,max,zoom) 940 MOVE ((xx*128*zoom)/max) +(240-(64*zoom)), (yy*64)/max 950 PLOT 6, ((xx*128*zoom)/max) +(240-(64*zoom)), (yy*64)/max 960 ENDPROC 970 DEF PROC_Quit 980 CLS 990 PRINTTAB(0,4)"Exit Program? Press Y to Quit or N to go back to main menu" 1000 REPEAT: G$=GET$: UNTIL G$="Y" OR G$="y" OR G$="N" OR G$="n" 1010 IF G$="Y" OR G$="y" : *QUIT 1020 ENDPROC