stairs Art/Electric
L-SYSTEMS
back to programs
 
koch snowflakes
general von koch
hilbert curve
pythagorean tree
H-H dragon curve
peano-gosper 19
'H' branching curve
plant
sierpinski square
sierpinski arrow
gosper square
sierpinski curve
spirograph circle
sierpinski carpet
easy carpet
sierpinski gasket
peano-gosper 13
peano-gosper 7
peano curve
penrose tiling
snowflake halls
peano octagon
peano hexagon
levy curve
sierpinski pentagon
not sierpinski
peano curve - H
square knot
sierpinski square 2
koch pentagram
fass curve
square cross
cesaro triangle
realistic snowflake
gray code dragon
sierpinski gasket 3
sierpinski sieve
koch square curve
dekking island
koch island
koch ff curve
hexagon spacefill
 
e-mail
SIERPINSKI CARPET
lsys sierpinski carpet

PROGRAM Sierpinski_Carpet   !VV 3M © W.Van Duyn 25th 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 250, y try 50"
INPUT x,y
PRINT "input: Size try 648,level try 4, dimension try 4"
INPUT size,level,ak
CLEAR
SET COLOR 16
FLOOD 1,1
LET k=360/ak
LET r=3
LET d=size/(r^level)
LET a=0
SET COLOR 15
FOR i=1 to ak
CALL shift(level,d,x,y,a,ak,k)
NEXT i
SET COLOR 15
FLOOD x+2,y+2
END SUB

SUB shift(level,d,x,y,a,ak,k)
LET lev=level
CALL move1(d,lev,a,x,y,k,ak)
CALL turnLEFT(a,k)
END SUB

SUB move1(d,lev,a,x,y,k,ak)
IF lev=0 THEN
CALL travelON(d,a,x,y)
EXIT IF
ELSE
CALL move1(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k,ak)
END IF
END SUB

SUB move2(d,lev,a,x,y,k,ak)
IF lev=0 THEN
CALL jump(d,a,x,y)
EXIT IF
ELSE
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move1(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL move2(d,lev-1,a,x,y,k,ak)
END IF
END SUB

SUB erase(d,lev,a,x,y,k,ak)
IF lev=0 THEN
CALL jump(d,a,x,y)
EXIT IF
ELSE
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL turnRIGHT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnRIGHT(a,k)
CALL erase(d,lev-1,a,x,y,k,ak)
CALL turnLEFT(a,k)
CALL erase(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 jump(d,a,x,y)
OPTION ANGLE degrees
LET x2=x+d*cos(a)
LET y2=y+d*sin(a)
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


Website, Text and Some Images Copyright © 2002 tzingaro.com, all rights reserved.