P3D: Ejemplos de Repetición
1 Estrategias para usar construcción basada en repetición
Recordemos que la estructura básica de un ciclo for
es:
for( int n=1; n<=10; n++){
// repite este bloque de código 10 veces
// ...
}
La clave para construir algo basado en ciclos es identificar el patrón a repetir:
- ¿Qué tienen en común los elementos repetidos?
- ¿Hay algo constante?
- ¿Qué es lo que cambia entre cada elemento?
- ¿Cómo es que cambia?
Ya que lo identifiquemos, es posible aprovechar que las transformaciones (translate
, rotate
) se van acumulando. También es posible usar la variable n
para parametrizarlas. Además, es posible usar una variable como “acumulador”.
Veamos cómo se puede hacer una hilera de 10 cubos con estas diferentes opciones.
1.1 Transformaciones acumuladas
En esta versión, aprovechamos que mientras no usemos pushMatrix()
y popMatrix()
, el origen se va a quedar en el último lugar en el que estábamos.
for(int n=1; n<=10; n++){
box(1);
translate(2, 0, 0);
}
Esta versión la podemos leer en lenguaje natural de la siguiente forma:
repite 10 veces lo siguiente: dibuja un cubo de lado 1, y muévete 2 unidades en x
1.2 Transformaciones parametrizadas
Otra opción es:
for( int n=0; n<10; n++){
pushMatrix();
translate(2*n, 0, 0);
box(1);
popMatrix();
}
Esta la podemos leer algo así:
dibuja 10 cubos de la siguiente forma: para el cubo número n
, muévete 2\*n
unidades en x
, y dibuja un cubo de lado 1.
1.3 Transformaciones con parámetro acumulador
Esta es un poco la mezcla de las otras dos. La idea es tener una variable que cambia de valor con cada iteración del ciclo.
Para nuestro ejemplo:
int x = 0;
for(int n=1; n<=10; n++){
pushMatrix();
translate(x, 0, 0);
box(1);
popMatrix();
2;
x = x + }
Todas estas opciones son equivalentes, pero puede ser que alguna te acomode más que otra :)
Para este ejemplo básico la primera probablemente es la mejor, pero conviene tener presentes las otras opciones que pueden ser más versátiles en otras ocasiones.
2 Ejemplos / Inspiración
Las siguientes son algunas construcciones realizadas gracias al uso de ciclos for
.
Los ejemplos están ordenados más o menos por orden de dificultad.
2.1 Escalera
Tal vez el ejemplo más básico y útil a la vez. ¿Qué diferencía a un escalón del siguiente?
Si te cuesta obtener el patrón, puedes intentar construirla manualmente para que notes cuáles son las acciones que estás repitiendo.
2.2 Múltiples pisos / “Jenga”
Hay varias formas de hacer esta construcción. Dependiendo de cómo lo veas, puedes o no utilizar rotaciones.
Además de las figuras del “jenga”, puedes utilizar alguna una otra construcción que ya hayas realizado, y hacer varios pisos al repetirla.
¿Qué es lo que diferencía a un piso del siguiente?
2.3 Múltiples pisos / “Jenga” - con rotación
Parecido al anterior, pero incorporando rotaciones en cada piso.
2.4 Pirámide
Esta se parece a la construcción de varios pisos, pero con una diferencia importante. De nuevo: ¿qué es lo que varía entre cada uno de los pisos?
2.5 Círculo de columnas
Parece sencilla, pero hay que poner atención en el orden en el que se aplican las rotaciones y traslaciones. Lo bueno es que si te “equivocas”, puede ser que te salgan otras construcciones interesantes.
2.6 Escalera de caracol
Aquí hay un poco de todo: translaciones, rotaciones, y probablemente varios pushMatrix()
y popMatrix()
.