|
PROGRAM Snowflake_Halls !original has level set to four
!From p146 B.B.Mandelbrot: Fractal Geometry of Nature
!true basic program by W van Duyn April 2004
SET MODE "color"
SET WINDOW 0,1199,0,903
SET BACKGROUND COLOR "white"
CLEAR
CALL init(x,y)
END
SUB init(x,y)
PRINT "input: x try 200, y try 250"
INPUT x,y
PRINT "input: Side try 200,level try 3, dimension try only 6"
INPUT size,level,ak
CLEAR
SET COLOR "black"
FLOOD 1,1
LET a=0
LET k=360/ak
SET COLOR 15
CALL shift(level,size,x,y,a,ak,k)
END SUB
SUB shift(level,size,x,y,a,ak,k)
OPTION ANGLE degrees
LET lev=level
LET r=2*(1+COS(k))
LET d= size/(r^(level-1))
CALL move(d,lev,a,x,y,k)
END SUB
SUB move(d,lev,a,x,y,k)
IF lev=0 THEN
CALL travelON(d,a,x,y)
ELSE
CALL turnLEFT(a,k)
CALL move(d,lev-1,a,x,y,-k)
CALL move2(d,lev-1,a,x,y,k)
CALL turnRIGHT(a,k)
CALL move(d,lev-1,a,x,y,k)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)
CALL turnRIGHT2(a,k)
CALL move2(d*0.57735,lev-1,a,x,y,k)
CALL move(d*0.57735,lev-1,a,x,y,-k)
CALL turnLEFT(a,k)
CALL move2(d*0.57735,lev-1,a,x,y,-k)
CALL turnLEFT(a,k)
CALL move2(d*0.57735,lev-1,a,x,y,-k)
CALL move(d*0.57735,lev-1,a,x,y,k)
CALL turnLEFT2(a,k)
CALL move2(d,lev-1,a,x,y,-k)
CALL move(d,lev-1,a,x,y,k)
END IF
END SUB
SUB move2(d,lev,a,x,y,k)
IF lev=0 THEN
CALL travelON(d,a,x,y)
EXIT IF
ELSE
CALL move(d,lev-1,a,x,y,k)
CALL move2(d,lev-1,a,x,y,-k)
CALL turnLEFT2(a,k)
CALL move(d*0.57735,lev-1,a,x,y,k)
CALL move2(d*0.57735,lev-1,a,x,y,-k)
CALL turnLEFT(a,k)
CALL move2(d*0.57735,lev-1,a,x,y,-k)
CALL turnLEFT(a,k)
CALL move(d*0.57735,lev-1,a,x,y,-k)
CALL move2(d*0.57735,lev-1,a,x,y,k)
CALL turnRIGHT2(a,k)
CALL move2(d,lev-1,a,x,y,k)
CALL turnRIGHT(a,k)
CALL move(d,lev-1,a,x,y,k)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k)
CALL move(d,lev-1,a,x,y,-k)
CALL turnLEFT(a,k)
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 turnLEFT2(a,k)
LET a=a+3*k/2
END SUB
SUB turnRIGHT(a,k)
LET a=a-k
END SUB
SUB turnRIGHT2(a,k)
LET a=a-5*k/2
END SUB
|