DECLARE SUB pal () DECLARE SUB branch (x, y, length, angle) ' Hoppy's Recursive L-system fractaly stuff ' vertical is 0 degrees ^ ' animated method, using sine generated values, but with a constant ' divider, per branch (aa, ra, da) pi = ATN(1) * 4 CLS DIM SHARED br%, ord%, a& a& = 1 INPUT "# branches (min 1)"; br% INPUT "Seed"; t& INPUT "# orders"; ko% DIM SHARED angle(br%), ratio(br%), di(br%), o%, ps RANDOMIZE t& FOR n% = 1 TO br% aa(n%) = 50 + RND * 50 ra(n%) = 50 + RND * 50 da(n%) = 50 + RND * 50 NEXT n% SCREEN 12 pal here: ord% = 0 o% = ko% ps = 14 / o% LINE (320, 420)-(320, 320), 1 FOR n% = 1 TO br% angle(n%) = pi * SIN(b& / aa(n%)) ratio(n%) = .5 + SIN(b& / ra(n%)) * .4 di(n%) = .5 + SIN(b& / da(n%)) * .4 LOCATE n% + 2, 1: PRINT INT(180 / pi * angle(n%)) LOCATE n% + 2, 10: PRINT ratio(n%) LOCATE n% + 2, 19: PRINT di(n%) NEXT n% COLOR 14: LOCATE 1, 1: PRINT "Hoppy's funky l-system trees" COLOR 15 LOCATE 2, 1: PRINT " Angles "; " Ratios "; " Diminuations" LOCATE br% + 3, 1: PRINT "Counter:"; b& LOCATE br% + 4, 1: PRINT "Orders:"; ko%; "Branches:"; br%; "Random seed:"; t& LOCATE br% + 5, 1: PRINT "Keys:" LOCATE br% + 6, 1: PRINT "7/1 -> +/- 1" LOCATE br% + 7, 1: PRINT "8/2 -> +/- 10" LOCATE br% + 8, 1: PRINT "9/3 -> +/- 100" branch 320, 420, 100, 0 DO i$ = INKEY$ LOOP WHILE i$ = "" CLS IF i$ = "7" THEN b& = b& + 1 IF i$ = "1" THEN b& = b& - 1 IF i$ = "8" THEN b& = b& + 10 IF i$ = "2" THEN b& = b& - 10 IF i$ = "9" THEN b& = b& + 100 IF i$ = "3" THEN b& = b& - 100 IF i$ = CHR$(27) THEN END GOTO here 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% 'Whooops: Not needed! 'branch xstart, ystart, newlength, newangle 'ord% = ord% - 1 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