|
PROGRAM LSYS_KOCH_SQUARE_CURVE ! © W.van Duyn 19th April 2004
OPTION ANGLE degrees
SET WINDOW 0,1199,0,903
SET COLOR "black"
BOX AREA 0,1199,0,903
FLOOD 1,1
SET background color "black"
SET color 15
PRINT "Input: x try 300, y try 600"
INPUT x,y
PRINT"INPUT: Size try 400, depth try 3, angle try 4"
INPUT size,level,ak
CLEAR
LET k=360/ak
LET r=3.25+cos(k)
LET d = size/(r^level)
LET a=0
FOR i = 1 to ak
SET COLOR i+9
CALL lsys(level,d,a,k,x,y)
CALL turnLEFT(a,k)
NEXT i
END
SUB lsys(level,d,a,k,x,y)
IF level=0 THEN
CALL moveON(d,x,y,a)
EXIT IF
ELSE
CALL lsys(level-1,d,a,k,x,y)
CALL lsys(level-1,d,a,k,x,y)
CALL turnRIGHT(a,k)
CALL lsys(level-1,d,a,k,x,y)
CALL turnRIGHT(a,k)
CALL lsys(level-1,d,a,k,x,y)
CALL turnRIGHT(a,k)
CALL lsys(level-1,d,a,k,x,y)
CALL turnRIGHT(a,k)
CALL lsys(level-1,d,a,k,x,y)
CALL turnRIGHT(a,k)
CALL lsys(level-1,d,a,k,x,y)
CALL turnLEFT(a,k)
CALL lsys(level-1,d,a,k,x,y)
END IF
END SUB
SUB moveON(d,x,y,a)
OPTION ANGLE degrees
LET dx=d*cos(a)
LET dy=d*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
|