Este tutorial detalla el proceso para dibujar un patrón de líneas paralelas horizontales en Processing, utilizando varias opciones de expresiones repetitivas.
Primero que nada, vale la pena aterrizar qué es lo que queremos dibujar, y especificarlo a nivel numérico.
De manera arbitraria decidimos que el lienzo tendrá 600 pixeles de ancho (width
) y también 600 de alto (height
), y que las líneas estarán separadas por 100 pixeles en lo vertical.
Marcamos los puntos de inicio y final de cada línea, y encontramos sus coordenadas correspondientes:
Con este boceto anotado, podemos hallar y describir lo siguiente:
X
: la inicial es 0, y la final es 600Y
en su punto inicial y en su punto final. Esto hace que sea una línea horizontalY
varían por una diferencia de 100.De acuerdo a los hallazgos, podemos describir a la plantilla de nuestras líneas de esta manera:
line( 0, y, 600, y);
Así, dejamos claro que las cantidades en X
son constantes, y las cantidades en Y
son variables. La misma cantidad en Y
se repite en el punto inicial y en el punto final.
Según lo que establecimos, en cada línea la variable y
tiene una diferencia de 100 con la anterior.
Hay varias posibilidades para describir en código este comportamiento.
La forma más común de utilizar los ciclos for
es como una forma de indicar cuántas veces va a repetirse algún bloque de código.
Los siguientes son dos ejemplos de ciclo for
que se repiten 5 veces:
// Repite 5 veces, i vale: 0, 1, 2, 3, 4:
for( int i=0; i<5; i++ ){
//
}
// Repite 5 veces, i vale: 1, 2, 3, 4, 5:
for( int i=1; i<=5; i++){
//
}
Nota que la diferencia entre ambos es el valor inicial de i
, y la comparación con el número 5 dentro de la condición
Con esta estructura de ciclo, hay diversas maneras de “insertar” nuestra plantilla de línea:
Podemos utilizar a la variable i
como el factor de una multiplicación, para que en cada iteración, y
tome el valor correspondiente.
En nuestro ejemplo, y
sigue la secuencia 100, 200, 300, 400, 500. Así que si i
sigue la secuencia 1, 2, 3, 4, 5, podemos multiplicarla por 100:
// Variable y
float y;
// Repite 5 veces, i vale: 1, 2, 3, 4, 5:
for( int i=1; i<=5; i++){
100; // i como factor
y = i * line( 0, y, 600, y ); // plantilla de línea
}
Otra forma de conceptualizar lo que sucede, es establecer que en cada iteración de ciclo, la variable y
aumenta 100 al valor que tenía previamente. Es decir, se comporta como acumulador.
[Variables: Contadores, Acumuladores, Banderas]
Así que y
ha de tener un valor inicial, y en cada iteración la incrementamos 100. En este caso no es crucial cuál es la secuencia que sigue i
, puede ser 0, 1, 2, 3, 4 o 1, 2, 3, 4, 5
// Variable y, con valor inicial
float y = 100;
// Repite 5 veces, i vale: 1, 2, 3, 4, 5:
for( int i=1; i<=5; i++){
line( 0, y, 600, y ); // plantilla de línea
100; // incrementa 100 al acumulador
y = y + }
Como nota, la expresión de incremento del acumulador también puede escribirse:
100; // incrementa 100 al acumulador y +=
Podemos utilizar la función map( )
, que se encargará de realizar las cuentas de acuerdo a los valores de la variable i
.
Solo hay que tener claro cuál es el rango de i
(valor mínimo y máximo), y cuál es el rango que le asignaremos a y
:
// Variable y
float y;
// Repite 5 veces, i vale: 1, 2, 3, 4, 5:
for( int i=1; i<=5; i++){
// mapea i, de un rango original entre 1 y 5
// a un rango entre 100 y 500
map( i, 1, 5, 100, 500);
y =
line( 0, y, 600, y ); // plantilla de línea
}
El ciclo for
es muy flexible y nos permite tener comportamientos como los descritos arriba sin necesidad de variables extra.
Podemos usar el ciclo para iterar directamente con la variable y
de nuestra plantilla. Solo necesitamos identificar lo siguiente para nuestro caso:
y
: 100y < 600
(o y <= 500
)y
aumenta 100Esto se traduce a:
for( float y=100; y < 600; y = y + 100 ) {
line( 0, y, 600, y ); // plantilla de línea
}
O un poco más conciso:
for( float y=100; y < 600; y += 100 ) {
line( 0, y, 600, y ); // plantilla de línea
}
Al final, si no usaremos animación e interacción, nuestro código puede quedar de la siguiente forma:
// crea un lienzo de 600x600
size( 600, 600 );
// Agrega aquí el ciclo que prefieras
// guarda imagen:
save("lineas-paralelas.png");
O, usando la estructura del ciclo de animación draw()
:
void setup(){
// crea un lienzo de 600x600
size( 600, 600 );
}
void draw(){
// Agrega aquí el ciclo de dibujo que prefieras
}
De cualquier forma, la imagen resultante se ve de la siguiente forma:
¡Listo! Ahora a practicar con otros patrones :)