PROGRAM Peano_Gosper_Curve_19 !(15th April 2004 © W.Van Duyn)
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 500, y try 50"
INPUT x,y
PRINT "input: Side try 480,level try 3, dimension try 6"
INPUT side,level,ak
CLEAR
SET COLOR "black"
FLOOD 1,1
LET a=-30
LET k=360/ak
LET r=3+2*COS(k)
LET d=side/(r^level)
LET lev=level
SET COLOR 13
CALL move1(d,lev,a,x,y,k)
END SUB
SUB move1(d,lev,a,x,y,k)
IF lev=0 THEN
SET COLOR 11
CALL travelON(d,a,x,y)
EXIT IF
ELSE
CALL move1(d,lev-1,a,x,y,k)!1
CALL move1(d,lev-1,a,x,y,k)!2
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!3
CALL move2(d,lev-1,a,x,y,k)!4
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k)!5
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!6
CALL move2(d,lev-1,a,x,y,k)!7
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!8
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k)!9
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!10
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)!11
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!12
CALL move1(d,lev-1,a,x,y,k)!13
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)!14
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!15
CALL move1(d,lev-1,a,x,y,k)!16
CALL move1(d,lev-1,a,x,y,k)!17
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)!18
CALL move2(d,lev-1,a,x,y,k)!19
CALL turnLEFT(a,k)
END IF
END SUB
SUB move2(d,lev,a,x,y,k)
IF lev=0 THEN
SET COLOR 14
CALL travelON(d,a,x,y)
EXIT IF
ELSE
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!19
CALL move1(d,lev-1,a,x,y,k)!18
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!17
CALL move2(d,lev-1,a,x,y,k)!16
CALL move2(d,lev-1,a,x,y,k)!15
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k)!14
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!13
CALL move2(d,lev-1,a,x,y,k)!12
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k)!11
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!10
CALL turnLEFT(a,k)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k)!9
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!8
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!7
CALL move1(d,lev-1,a,x,y,k)!6
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)!5
CALL turnRIGHT(a,k)
CALL move1(d,lev-1,a,x,y,k)!4
CALL move1(d,lev-1,a,x,y,k)!3
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)!2
CALL move2(d,lev-1,a,x,y,k)!1
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
|