RANDOMIZE TIMER pi = ATN(1) * 4 SCREEN 12 LOCATE 6, 1: COLOR 11 'INTRO PRINT " FracSpir Fractal Spirals" PRINT : COLOR 3 PRINT " Each spiral arm shrinks proportionally," PRINT " hence fractally, down its neighbour-successor" LOCATE 12, 1: COLOR 7 PRINT " -> SPACE = END" PRINT PRINT " -> ENTER = Toggle On/Off for Waiting after each picture" PRINT " (If Wait=On, push a key to Continue)" PRINT PRINT " -> Other key = interrupt, and New FracSpir" PRINT COLOR 14: LOCATE 24, 27: PRINT "Credits: guido wuyts 1997" col = 0 FOR alf = 0 TO 360 STEP 5 col = (col + 1) MOD 7 + 9 a = alf * pi / 180: c = COS(a): s = SIN(a) PSET (x0 + leng * c, y0 + leng * s), col NEXT alf PLAY "l21o3cc+dd+ee-dd-c" col = 11: a$ = "" WHILE a$ = "" COLOR col: LOCATE 27, 28 PRINT "-> Push a key..." tijd = TIMER: WHILE TIMER - tijd < .5: WEND IF col = 11 THEN col = 5 ELSE col = 11 a$ = INKEY$ WEND a$ = "": CLS WINDOW (-320, -240)-(320, 240) DEFINT I-K nieuw: 'new spiral tijd = TIMER a$ = "": itel = 0 inum = 2 + RND * 13 'number of spiral arms a1 = 2 * pi / inum 'angular distance arms inc = (1 + RND * 9) * 90 / inum 'number of points over a1 REDIM ij(inc), ipal(inum) CLS ro = 100 + RND * 400 'initial radius dr = 5 + RND * 15: 'radius increment da = a1 / inc 'angular increment FOR i = 0 TO inum - 1 'make color palette tos: ipal(i) = 1 + RND * 14 FOR j = 0 TO i - 1 IF ipal(i) = ipal(j) THEN GOTO tos NEXT j NEXT i FOR i = 0 TO inc 'make model spiral arm r = ro + (-1 + 2 * RND) * dr 'brownian line IF r > 500 THEN r = 500 IF r < 50 THEN r = 50 ij(i) = r ro = r NEXT i shr = ij(0) / ij(inc) 'shrink factor = initial/final radius IF shr > 1 THEN shr = 1 / shr 'change run direction... i0 = 1: i1 = inc: istp = 1 j0 = 0: j1 = inum - 1: jstp = 1 daa = da ELSE i0 = inc - 1: i1 = 0: istp = -1 '...or not j0 = inum - 1: j1 = 0: jstp = -1 daa = -da END IF IF shr > .95 THEN GOTO nieuw 'too little shrink = redo her: 'shrink phases... ij(i0 - istp) = shr * ij(i0 - istp) 'initial point ro = ij(i0 - istp) FOR i = i0 TO i1 STEP istp 'points 1 TO inc a = i * da r = shr * ij(i) 'shrink radius IF ABS(r - ij(i)) < .6 THEN IF b$ = "y" THEN PLAY "o4l42a": SLEEP 'wait ELSE SLEEP 1: GOTO nieuw 'make new spiral END IF END IF a$ = INKEY$ IF a$ = " " THEN END IF a$ = CHR$(13) THEN IF b$ = "" THEN b$ = "y" ELSE b$ = "" 'wait parm a$ = "" END IF IF a$ <> "" THEN GOTO nieuw ij(i) = r FOR j = j0 TO j1 STEP jstp '0 TO inum - 1 aa = j * a1 + a IF istp = -1 THEN kl = (j + itel) MOD inum ELSE kl = (inum - j + itel) MOD inum END IF LINE (ro * SIN(aa - daa), ro * COS(aa - daa))-(r * SIN(aa), r * COS(aa)), ipal(kl) NEXT j ro = ij(i) NEXT i itel = itel + 1 GOTO her END