|
PROGRAM Peano_VanDuyn_Curve !© W.van Duyn 23rd April 2004
SET MODE "color"
SET WINDOW 0,1199,0,903
SET BACKGROUND COLOR "white"
CLEAR
CALL init
END
SUB init
OPTION ANGLE degrees
PRINT "input: x try 600 or (400), y try 100 or (250)"
INPUT x,y
PRINT "input: Size try 240 or (120),level try 3,type try 3 or (4)"
INPUT size,level,ak
CLEAR
SET COLOR "black"
FLOOD 1,1
LET a=0
LET k=360/(2*ak)
LET r=1+2*SIN(2*k)
LET d=size/(r^(level))
LET lev=level
SET COLOR 13
FOR i=1 TO ak
CALL axiom(d,lev,a,x,y,k,ak)
NEXT i
END SUB
SUB axiom(d,lev,a,x,y,k,ak)
CALL move(d,lev,a,x,y,k,ak)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
END SUB
SUB move(d,lev,a,x,y,k,ak)
IF lev=0 THEN
EXIT IF
ELSE
CALL move(d,lev-1,a,x,y,k,ak)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
FOR i = 1 TO ak-1
CALL move(d,lev-1,a,x,y,k,ak)
CALL travelON(d,a,x,y)
CALL turnRIGHT(a,k)
CALL travelON(d,a,x,y)
CALL turnRIGHT(a,k)
NEXT i
FOR j = 1 TO ak-1
CALL move(d,lev-1,a,x,y,k,ak)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
CALL travelON(d,a,x,y)
CALL turnLEFT(a,k)
NEXT j
CALL move(d,lev-1,a,x,y,k,ak)
CALL travelON(d,a,x,y)
CALL turnRIGHT(a,k)
CALL travelON(d,a,x,y)
CALL turnRIGHT(a,k)
CALL move(d,lev-1,a,x,y,k,ak)
END IF
END SUB
SUB travelON(d,a,x,y)
OPTION ANGLE degrees
LET x2=x+d*cos(a)
LET y2=y+d*sin(a)
PLOT x,y;x2,y2
LET x=x2
LET y=y2
END SUB
SUB turnLEFT(a,k)
LET a=a+k
END SUB
SUB turnRIGHT(a,k)
LET a=a-k
END SUB
|