home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 1: Collection A
/
17Bit_Collection_A.iso
/
files
/
37.dms
/
37.adf
/
frac.bas
< prev
next >
Wrap
BASIC Source File
|
1988-05-22
|
4KB
|
121 lines
1 scnclr
5 drawmode 1
20 dim d(128,64)
30 input "number of levels" ; le
40 ds = 2 : for n =1 to le : ds = ds + 2 ^ (n-1) : next n
50 mx = ds-1 : my = mx / 2
51 rh = pi*30/180 :vt = rh *1.2
60 for n = 1 to le : l = 10000 / 1.8^n
70 ?"working on level" ; n
80 ib = mx / 2^n : sk = ib *2
90 gosub 150
100 gosub 220
110 gosub 290
120 next n
121 scnclr
122 pena 1
123 paint (10,10) ,0
130 goto 640
140 rem******
150 for ye = 0 to mx-1 step sk
160 for xe = ib + ye to mx step sk
170 ax = xe - ib : ay = ye : gosub 370 : d1 = d : ax = xe + ib : gosub 370 : d2 = d
180 d = (d1+d2)/2 + rnd(1) * l / 2 - l / 4 : ax = xe : ay =ye : gosub 420
190 next xe
200 next ye : return
210 rem *************
220 for xe = mx to 1 step -sk
230 for ye = ib to xe step sk
240 ax = xe : ay = ye + ib : gosub 370 : d1 = d : ay = ye -ib : gosub 370 : d2 = d
250 d = (d1+d2) / 2 + rnd(1)* l / 2 - l / 4 : ax = xe : ay =ye : gosub 420
260 next ye
270 next xe : return
280 rem******************
290 for xe= 0 to mx - 1 step sk
300 for ye = ib to mx - xe step sk
310 ax= xe +ye - ib : ay = ye - ib : gosub 370 : d1 = d
320 ax = xe + ye +ib : ay = ye + ib : gosub 370 : d2 = d
330 ax = xe + ye : ay = ye : d= (d1 + d2 )/ 2 + rnd ( 1 ) * l / 2 - l / 4 : gosub 420
340 next ye
350 next xe : return
360 rem****************
370 if ay > my then 390
380 by = ay : bx= ax : goto 400
390 by = mx +1 - ay : bx = mx -ax
400 d= d ( bx , by ) : return
410 rem*************
420 if ay > my then 440
430 by = ay : bx = ax : goto 450
440 by = mx + 1 - ay : bx = mx - ax
450 d( bx , by ) = d : return
460 rem**********************
470 if xo <> -999 then 500
480 if zz < 0 then gosub 1070 : z2 = zz : zz = 0 : goto 620
490 gosub 1090 : goto 610
500 if z2 > 0 and zz > 0 then 610
510 if z2 <0 and zz < 0 then z2 = zz : zz = 0 : goto 620
520 w3 = zz / (zz-z2) : x3 = (x2-xx)*w3+xx : y3 = (y2-yy)*w3+yy : z3 = 0
530 zt = zz : yt = yy : xt = xx
540 if zz > 0 then 590
550 rem*****************
560 zz = z3 : yy = y3 : xx = x3 : gosub 950
570 gosub 1070 : zz = 0 : yy = yt : xx = xt : z2 = zt : goto 620
580 rem ******************
590 zz = z3 : yy = y3 : xx = x3 : gosub 950
600 gosub 1090 : zz = zt : yy = yt : xx = xt
610 z2 = zz
620 x2 = xx : y2 = yy : return
630 rem ****************
640 gosub 1110
650 xs = .04 : ys = .04 : zs = .04
660 for ax = 0 to mx : xo=-999 : for ay = 0 to ax
670 gosub 370 : zz = d : yy = ay / mx * 10000 : xx = ax / mx *10000 -yy / 2
680 gosub 940 : next ay : next ax
690 for ay = 0 to mx : xo = -999 : for ax = ay to mx
700 gosub 370 : zz = d : yy = ay / mx *10000 : xx = ax / mx *10000 -yy / 2
710 gosub 940 : next ax : next ay
720 for ex = 0 to mx : xo = -999 : for ey = 0 to mx - ex
730 ax = ex + ey : ay = ey : gosub 370 : zz = d : yy = ay / mx *10000
740 xx = ax / mx *10000 - yy / 2 : gosub 940 : next ey : next ex
750 goto 1130
760 rem********
770 if xx <> 0 then 800
780 if yy <=0 then ra = - pi / 2 : goto 820
790 ra = pi / 2 : goto 820
800 ra = atn(yy/xx)
810 if xx < 0 then ra = ra + pi
820 r1 = ra + rh : rd = sqr(xx*xx+yy*yy)
830 xx = rd *cos(r1) : yy = rd * sin(r1)
840 return
850 rem******
860 rd = sqr(zz*zz+xx*xx)
870 if xx = 0 then ra = pi / 2 : goto 900
880 ra = atn (zz/xx)
890 if xx <0 then ra = ra+pi
900 r1 = ra-vt
910 xx = rd * cos(r1)+xx : zz = rd * sin(r1)
920 return
930 rem *************
940 gosub 470
950 xx = xx * xs : yy = yy * ys : zz = zz *zs
960 gosub 770
970 gosub 860
980 if xo = - 999 then pr$ = "m"
985 if xo <> -999 then pr$ = "d"
990 xp = int(yy)+cx : yp = int(zz)
1000 gosub 1030
1010 return
1020 rem*********
1030 xp = xp * 0.625 : yp = 33.14-0.663 *yp
1040 if pr$ = "m" then x8 = xp : y8 = yp : x0 = x
1045 if y8 > 179 or y8 < 0 or yp > 179 or yp< 0 then return
1050 draw (x8,y8 to xp,yp)
1055 x8 = xp : y8 = yp : return
1070 pena 9 : return
1080 rem***********
1090 pena 8 : return
1110 return
1120 rem *******
1130 input a$
1140 end