![]() |
| Emiliano Causa e_causa@yahoo.com.ar www.emiliano-causa.com.ar www.biopus.com.ar |
Christian Silva entorno3@gmail.com www.hipertextos.com.ar |
Leonardo Garay todotresde@gmail.com |
David Bedoian bedoiandavid@yahoo.com www.bedoiandavid.com.ar |
En la computación no existen los números al azar dado que la computadoras son máquinas "idealmente" determinista, existen varios factores físicos que agregan un factor de aleaoriedad a las computadoras, pero en principio las computadoras son deterministas. Debido a esto y a la necesidades que surgen de disponer de valores aleatorios, existen funciones de números pseudo-aleatorios que nos permiten escapar del determinismo computacional. Estas funciones son capaces de generar secuencias de números con patrones análogos a los números aleatorios. Si desea saber más sobre este tema puede ver el artículo correspondiente en Wikipedia.
En Processing la fución que permite generar números pseudo-aleatorios se llama random( ) y puede usar uno o dos parámetros. Si usa uno, la función arroja números cada vez que se la invoca, restringiendo estos valores entre cero y el valor del parámetros. En el ejemplo siguiente la función random( ) arroja valores entre 0 y 10:
void setup(){
} Hecho en Processing |
Estos valores pueden ser utilizados para obtener parámetros como la posición de un rectángulo en la pantalla:
void setup(){
}
}
} Hecho en Processing |
En este ejemplo las funciones random(width) y random(height) devuelven valores pseudo-aleatorios para la posición horizontal (entre cero y el ancho de la pantalla) y para la posición vertical (entre cero y el alto de la pantalla). Mientras no se presione el mouse, el draw( ) acumula cuadrados en la pantalla.
Tambiém es posible restringir el límite inferior y superior de la función random( ) usando dos parámetros: En el ejemplo que sigue, la función random(10,20) devuelve valores pseudo-aleatorios entre 10 y 20:
void setup(){
} Hecho en Processing |
Esto es útil en casos como el del ejemplo que sigue, en el que queremos que los números de la secuencia ronden por las valores de la posición horizontal y vertical del mouse:
int col;
}
}
} Hecho en Processing |
En este ejemplo las funciones random( mouseX-30 , mouseX+30 ) y random( mouseY-30 , mouseY+30 ) devuelven valores al pseudo-aleatorios dentro de los un rango de 30 píxeles verticales y horizontales del mouse. Cuando se presiona el botón, se ejecuta el background(0) que pinta el fondo de negro.
La forma en que se suceden cíclicamente los colores es por el uso de la paleta HSB, Processing permite usar esta paleta cuya sigla significa Hue, Saturation y Brightness (Tinte, Saturación y Brillo), si desea saber más este tema puede verlo en Wikipedia. Con la instrucción colorMode(HSB) se determina que se usara la paleta HSB (caso contrario sería colorMode(RGB) para la paleta RGB). Usando esta paleta las instrucciones de pintado, como fill( ) usan 3 o 4 parámetros: tinte, saturación, brillo y opacidad (en caso de usar 4 parámetros). Así la variable llamada col y que tiene un incremento cíclico dada la operación "col = (col+1) % 256", permite ir cambiando el tinte.
El ejemplo que sigue utiliza la función random( ) para agregarle ruido de desenfoque a la imagen. Para ello, imprime la imagen pixel por pixel pero el color lo toma de otro pixel ligeramente vecino a este. Para trabajar con los pixeles de la imagen usa un tipo de datos de Processing llamado PImage que permite levantar un jpg. (con la función loadImage( ) ), imprimirla en pantalla con la instrucción image( ), así como leer el color de cada uno de sus píxeles con la función get( ). El nivel de ruido depende de la posición vertical del mouse:
código fuente Hecho en Processing |
El desenfoque se produce por que en vez de tomar el color del pixel que le corresponde se lo desplaza ligeramente a través de número pseudo-aleatorios, esto sucede en la instrucción:
este = imagen.get( x+int( random(-des,des) ) , y+int( random(-des,des) ) );
En donde imagen.get( x , y ) lee el color del pixel x,y. En este caso en vez de x se le pasa como parametro:
x+int( random(-des,des) )
Que combina la función int( ) que transforma los valores reales de la función random( ) en valores enteros. Cuanto más grande sea el valor de la variable llamada des, mayor será el desenfoque que produce.
El ejemplo que sigue aprovecha el random( ) como un recurso expresivo. En cada vuelta de animación, elige un pixel al azar de la imagen, captura su color y luego imprime un rectángulo con una tamaño decidido al azar y con el mismo color (más transparente) que el pixel original. Si presiona el mouse el procedimiento se reinicia:
código fuente Hecho en Processing |
Este ejemplo se inspiró en el trabajo BOX.FITTING.IMG del artísta JARED TARBELL del sitio www.complexification.net.