PROGRAM LSYS_H !(HURRAH! 19th April 2004 © W.van Duyn)
SET WINDOW 0,1199,0,903
SET background color "white"
SET color 16
PRINT"Number of iterations try 6, size try 192"
INPUT depth,size
CLEAR
SET COLOR MIX (100)0.9,0.9,0.9 !light gray
SET COLOR MIX (200)0.8,0.1,0.8 !light magenta
LET w=(2^(depth+1))
LET f=size*4
LET h=f/w
LET x=600
LET y=450
LET k=90
LET a=0
CALL grid(w,h,f)
CALL turnLEFT(a,k) &nssp; ! make 'H' vertical
SET color 200
CALL lsysH(depth,size,a,k,r,x,y)
END
SUB lsysH(depth,size,a,k,r,x,y)
IF depth=0 THEN
EXIT IF
ELSE
CALL turnLEFT(a,k)
CALL moveON(size,x,y,a)
CALL turnLEFT(a,k)
CALL moveON(size,x,y,a)
CALL lsysH(depth-1,size/2,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL moveON(size,x,y,a)
CALL lsysH(depth-1,size/2,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL moveON(size,x,y,a)
CALL turnLEFT(a,k)
CALL moveON(size,x,y,a)
CALL lsysH(depth-1,size/2,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL moveON(size,x,y,a)
CALL lsysH(depth-1,size/2,a,k,r,x,y)
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL turnLEFT(a,k)
CALL jump(size,x,y,a)
CALL turnRIGHT(a,k)
END IF
END SUB
SUB moveON(size,x,y,a) !move forward
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 jump(size,x,y,a) !jump forward
OPTION ANGLE degrees
LET dx=size*cos(a)
LET dy=size*sin(a)
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 grid(w,h,f)
SET COLOR 100
LET dxy=f-h
LET dx=600+dxy/2
LET dy=450+dxy/2
LET x1=x0
LET y1=y0
FOR k = 1 to w
PLOT x1+dx,y0+dy; x1+dx-dxy,y0+dy
PLOT x0+dx,y1+dy; x0+dx,y1+dy-dxy
LET x0=x0-h
LET y0=y0-h
NEXT k
END SUB
|