DECLARE SUB pal () DECLARE SUB branch (x, y, length, angle) ' Recursive L-system fractaly stuff ' vertical is 0 degrees ^ pi = ATN(1) * 4 CLS DIM SHARED br%, ord%, a& a& = 1 INPUT "# branches (min 1)"; br% DIM SHARED angle(br%), ratio(br%), di(br%), o%, ps INPUT "Random stuff"; r$: IF UCASE$(r$) = "Y" THEN INPUT "Seed"; t&: GOTO r FOR n% = 1 TO br% PRINT "Angle of branch #" + STR$(n%); INPUT a angle(n%) = pi * a / 180 PRINT "Ratio of division for branch #" + STR$(n%) + "(0 at start 1 at other end)"; INPUT ratio(n%) PRINT "Length diminuation (best less than 1!)"; INPUT di(n%) NEXT n% st: INPUT "# orders"; o% SCREEN 12 pal ps = 14 / o% LINE (320, 420)-(320, 320), 1 branch 320, 420, 100, 0 LOCATE 1, 1: PRINT SPACE$(7) 'BEEP SLEEP 0 END r: RANDOMIZE t& FOR n% = 1 TO br% a = RND * 360 IF a > 180 THEN a = 180 - a angle(n%) = pi * a / 180 ratio(n%) = .3 + RND * .7 di(n%) = .3 + RND * .6 NEXT n% GOTO st SUB branch (x, y, length, angle) ord% = ord% + 1: IF ord% > o% THEN EXIT SUB FOR n% = 1 TO br% xstart = x + length * ratio(n%) * SIN(angle) ystart = y - length * ratio(n%) * COS(angle) newangle = angle + angle(n%) newlength = length * di(n%) xend = xstart + newlength * SIN(newangle) yend = ystart - newlength * COS(newangle) LINE (xstart, ystart)-(xend, yend), ord% * ps: a& = a& + 1 IF ord% = o% THEN PSET (xend, yend), 15 branch xstart, ystart, newlength, newangle ord% = ord% - 1 NEXT n% END SUB SUB pal FOR p% = 1 TO 15 PALETTE p%, p% * 4 * 256 + 37 - (p% * 2) + p% * 65536 * (p% \ 6) PALETTE 15, 60 + 30 * 256 + 55 * 65536 LINE (p% * 4, 470)-(p% * 4 + 4, 480), p%, BF NEXT p% END SUB