Code Sketch


Sierpinski Square
By: Lalit Pant [2]
Category: Art
clear
invisible
setAnimationDelay(4)

setPenColor(blue)
setPenThickness(1)
setFillColor(color(0x77FFAA))

def relativeJumpTo(dx: Int, dy: Int) = jumpTo(position.x + dx, position.y + dy)

def doSquare(size: Int): Unit =
{
  val diag = size * 0.707 // sqrt(2)/2
  penUp
  setHeading(45)
  forward(diag)
  penDown
  setHeading(-90)
  repeat(4) { forward(size); right }
  penUp
  setHeading(-135)
  forward(diag)
}

def doSquares(level: Int, size: Int): Unit =
{
  if (level == 0)
  {
    doSquare(size)
    return
  }
  val s = size / 3
  for (i <- -1 until 2)
  {
    for (j <- -1 until 2)
    {
      if (!(i == 0 & j == 0))
      {
        relativeJumpTo(s * i, s * j)
        doSquares(level -1, s)
        relativeJumpTo(-s * i, -s * j)
      }
    }
  }
}

//doSquare(500)
doSquares(3, 500)