El triángulo de Sierpinski
Esta "curva" aparece tras dibujar muchos puntos. La tortuga empieza en el centro del triángulo, elige al azar uno de los vértices del triángulo, avanza la mitad de la distancia que hay entre su posición actual y el vértice y dibuja un punto. A continuación, elige otro vértice, avanza media distancia y .... El proceso se repite 10000 veces.
para empezar # Inicializamos la pantalla, el lapiz, la tortuga reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga # repite 10000 [sier] # repite 10000 veces fin para sier haz "vertice elige [ [190 -180] [-190 -180] [0 160] ] # elige vertice ponrumbo hacia :vertice # gira hacia el vertice avanza (distancia :vertice)/2 # avanza medio lado hacia vertice bajalapiz avanza 0 subelapiz # dibuja pixel fin |
Triángulo de Sierpinski mejorado
En este ejemplo, la curva se colorea (intenta entender cómo se elige el color). Esta curva no se dibuja como la anterior, sino que los puntos se dibujan a partir de dos variables X y Y.
para empezar # Inicializamos la pantalla, el lapiz, la tortuga reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga # haz "xcor 0 haz "ycor 0 # inicializamos xcor e ycor a 0 repite 10000 [sier] # repite 10000 veces fin para sier haz "vertice azar 3 # elige vertice si :vertice=0 [dibuja 190 cambiasigno 180 poncolorlapiz 2] si :vertice=1 [dibuja (-190) (-180) poncolorlapiz 3] si :vertice=2 [dibuja 0 160 poncolorlapiz 5] fin para dibuja :xp :yp haz "xcor (:xcor+:xp)/2 haz "ycor (:ycor+:yp)/2 ponxy :xcor :ycor bajalapiz avanza 0 subelapiz # dibuja pixel fin |
El triángulo generalizado
Podemos reescribir el programa para permitir cualquier orden de la curva de Sierpinski, y trazarla sobre triángulos, cuadrados, ... Sólo hay que indicar el orden en el Comando de Inicio, por ejemplo:
para empezar :orden # Inicializamos la pantalla, el lapiz, la tortuga reponetodo pontamañopantalla [400 400] poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga # haz "lado (:orden-2)*180 haz "frac 1/(:orden-1) haz "ang 360/:orden repite 10000 # repite 10000 veces [sier :orden :lado :frac :ang] fin para sier :orden :lado :frac :ang haz "angulo :ang*(azar :orden) # elige vertice ponx :frac * ((primero posicion) +:lado*seno :angulo) pony :frac * ((ultimo posicion) +:lado*coseno :angulo) bajalapiz avanza 0 subelapiz # dibuja pixel fin |