RecursiveBush.txt

Allikas: Lambda

{ This program defines a recursive subroutine that
  draws bush-like pictures.  A second subroutine,
  TestBush, is defined to call bush with
  reasonable parameters.  The TestBush subroutine
  is called at the end the program. }
   
SUB bush(size,depth)
   declare ct,angle,branchCt,length
   IF depth = 0 then
       green
       forward(size) back(size)
   OR IF depth > 0 then
       bush(2*size/3,depth-2)
       rgb(0.4,0.3,0.1)
       forward(size/2)
       branchCt := 1+randomInt(2)
       angle := (30 + randomInt(70))/(branchCt - 1)
       turn(-angle*(branchCt-1)/2)
       length := size/4 + size/2*random
       bush(length,depth-1)
       ct := 1
       LOOP
           turn(angle)
           length := size/4 + size/2*random
           bush(length,depth-1) 
           ct := ct + 1
           EXIT IF branchCt = ct
       END LOOP
       turn(-angle*(branchCt-1)/2)
       PenUp
       back(size/2)
       PenDown
   END IF
END SUB

SUB TestBush
  clear
  penUp
  moveTo(0,-8)
  penDown
  face(90)
  bush(14,5)
END SUB

{ The preceding SUB definitions only
  defined the subroutines.  To actually
  see them, you have to call them.
  The following will draw a sample bush. }

TestBush