Tres ejemplos
Ramas de longitud aleatoria
En el primer programa, cada nueva rama mide el 75% de la longitud de la rama anterior. Si cambiamos este valor, el árbol entero se dibuja proporcionalmente más grande o pequeño.
# Comando de Inicio: empezar para empezar repite 12 [ nuevo subelapiz retrocede 160 bajalapiz haz "angulo 60 arbol 80 espera 200] fin para nuevo # Inicializamos pantalla, papel, tortuga, ... reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga fin para arbol :long si :long< 10 [alto] # Fin de recursion si long muy pequeña pongrosor :long/9 # Reduce grosor lapiz al menguar la rama poncolorlapiz arbolcol :long # color de rama depende de long avanza :long giraizquierda :angulo/2 arbol :long * elige [0.7 0.75 0.8] giraderecha :angulo arbol :long * elige [0.7 0.75 0.8] giraizquierda :angulo/2 subelapiz retrocede :long bajalapiz # Volvemos a punto de partida fin para arbolcol :long haz "green redondea 2.5*(100-:long) # color depende de long devuelve ( lista 255 :green 0 ) # rojo si vale 0 y amarillo para 255 fin |
Ramas con ángulos aleatorios
También podemos cambiar aleatoriamente el ángulo de cada rama nueva.
# Comando de Inicio: empezar para empezar repite 12 [nuevo subelapiz retrocede 160 bajalapiz arbol 90 espera 200] fin para nuevo # Inicializamos pantalla, papel, lapiz, tortuga, ... reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga fin para arbol :long si :long< 10 [alto] # Fin de recursion si long muy pequeña pongrosor :long/9 # Reduce grosor lapiz al menguar la rama poncolorlapiz arbolcol :long # color de rama depende de long hazlocal "angulo elige [24 32 40 48 56 64 72] avanza :long giraizquierda :angulo/2 arbol :long*0.75 giraderecha :angulo # llamada a arbol con 3/4 long arbol :long*0.75 giraizquierda :angulo/2 subelapiz retrocede :long bajalapiz # Volvemos a punto de partida fin para arbolcol :long haz "green redondea 2.5*(100-:long) # color depende de long devuelve ( lista 255 :green 0 ) # rojo si vale 0 y amarillo para 255 fin |
Ramas aleatorias, pero sin pasarse
Finalmente, podemos variar el ángulo de una rama a la siguiente un valor aleatorio entre 5 y (:angulo-10)+:angulo/10, que para un ángulo de 50 grados, devuelve un valor entre 5 y 45 grados.
# Comando de Inicio: empezar para empezar repite 12 [nuevo subelapiz retrocede 160 bajalapiz haz "angulo 60 arbol 80 espera 200] fin para nuevo # Inicializamos pantalla, papel, lapiz, tortuga, ... reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga fin para arbol :long si :long< 10 [alto] # Fin de recursion si long muy pequeña pongrosor :long/9 # Reduce grosor lapiz al menguar la rama poncolorlapiz arbolcol :long # color de rama depende de long hazlocal "anguloarbol :angulo*elige [0.25 0.375 0.5 0.625 0.75] avanza :long giraizquierda :anguloarbol arbol :long*0.75 giraderecha :angulo # llamada a arbol con 3/4 long arbol :long*0.75 giraizquierda :angulo giraderecha :anguloarbol subelapiz retrocede :long bajalapiz # Volvemos a punto de partida fin para arbolcol :long haz "green redondea 2.5*(100-:long) # color depende de long devuelve ( lista 255 :green 0 ) # rojo si vale 0 y amarillo para 255 fin |