jardínBit

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
// ...
}

[Ciclos while y for]

La clave para construir algo basado en ciclos es identificar el patrón a repetir:

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();
  x = x + 2;
}

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().