Code Sketch


L-system Tree
By: Anay Narendra Kamat
Category: Art
cleari()

setSpeed(superFast)

zoom(0.7)

def steps = 7

val outputAfterGenerations = (0 until steps).foldLeft("X") { (generationOutput, _) =>

    generationOutput.foldLeft("") { (previous, input) =>
        val result = input match {
            case 'X' => "F-[[X]+X]+F[+FX]-X"
            case 'F' => "FF"
            case _   => input.toString
        }

        previous + result
    }

}

def tree = Picture {

    setPenColor(cm.darkGreen)
    
    def len = 4 * Math.pow(0.9, steps)
    def angle = 25
    
    outputAfterGenerations.foreach {
        case 'F' => forward(len)
        case 'G' =>
            penUp(); forward(len); penDown()
        case '[' => savePosHe()
        case ']' => restorePosHe()
        case '+' => right(angle)
        case '-' => left(angle)
        case _   =>
    }
    
}

drawCentered(tree)