PROGRAM LSYS_PLANT ! L-sys plant © W.van Duyn
SET WINDOW 0,1199,0,903
SET background color "white"
SET color 0
PRINT"Number of iterations try 4 or 5, size try 40, angle try 25"
INPUT depth,size,k
CLEAR
LET x=400
LET y=0
LET r=sqr(2)
LET a=90
CALL backColor
SET color 2
CALL lsys(depth,size,a,k,r,x,y)
END
SUB lsys(depth,size,a,k,r,x,y) !draw L-sys Plant
IF depth=0 THEN
CALL moveON(size,x,y,a)
ELSE
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL turnRIGHT(a,k)
CALL push(size,x,y,a)
CALL turnRIGHT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL pop(size,x,y,a)
CALL turnLEFT(a,k)
CALL push(size,x,y,a)
CALL turnLEFT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL turnRIGHT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL turnRIGHT(a,k)
CALL lsys(depth-1,size/r,a,k,r,x,y)
CALL pop(size,x,y,a)
END IF
END SUB
SUB moveON(size,x,y,a) !F
OPTION ANGLE degrees
LET dx=size*cos(a)
LET dy=size*sin(a)
PLOT x,y;x+dx,y+dy
LET x=x+dx
LET y=y+dy
END SUB
SUB turnRIGHT(a,k)
LET a=a-k
END SUB
SUB turnLEFT(a,k)
LET a=a+k
END SUB
SUB backColor ! simulated sky
FOR ii=0 TO 903 STEP 10
SET COLOR MIX (col) 1-ii/1806,1-ii/3612,1
SET COLOR col
BOX AREA 0,1200,ii,ii+10
NEXT ii
END SUB
MODULE stack
SHARE state(20,4),stack
LET stack=1
SUB push(size,x,y,a) !save graphix
LET state(stack,1)=size
LET state(stack,2)=x
LET state(stack,3)=y
LET state(stack,4)=a
LET stack=stack+1
END SUB
SUB pop(size,x,y,a) !restore graphix
LET stack=stack-1
LET size=state(stack,1)
LET x=state(stack,2)
LET y=state(stack,3)
LET a=state(stack,4)
END SUB
END MODULE
|