En el último artículo tratamos algunos elementos interesantes que merecen mayor atención: los condicionales y la aleatoriedad.
Una función condicional se ejecuta sólo cuando se da una determinada condición. Recordemos su estructura:
si (se da esta condición) {ejecuta esta función}
Por otra parte, hemos visto dos formas distintas de utilizar valores aleatorios: random() y noise(). Veamos sus diferencias:
- random(). Admite uno o dos datos. P.E. random(50) devuelve un número aleatorio entre 0 y 50; random(-1, 1) devuelve un número aleatorio entre -1 y 1
- noise() se usa para obtener números aleatorios de valores cercanos. Toma sus valores de un espacio tridimensional de coordenadas. Admite entre 1 y 3 valores, y al menos uno de ellos debe ser variable. Siempre devuelve valores entre 0 y 1. Para comprender mejor cómo se define y se toman valores del espacio de ruido, recomiendo los siguientes vídeos (en inglés):
Pues bien, es posible combinar condicionalidad y aleatoriedad para conseguir que determinadas funciones se ejecuten de manera más o menos aleatoria:
if ( random(1) > 0.5 ) {función 1}
La declaración anterior genera un número aleatorio entre 0 y 1, y si es mayor que 0.5, ejecuta la función 1. La probabilidad de que esto ocurra es del 50%.
if ( random(1) > 0.8 ){ función 1 }else if (random(1) < 0.1){ función 2 }else{ función 3 }
En este otro caso, la función 1 tiene un 20% de probabilidad de ejecutarse; la función 2, un 10%; y la función 3, el 70% restante. De este modo podemos introducir comportamientos aleatorios sin renunciar a ejercer cierto control sobre ellos.
En el siguiente ejemplo tenemos un punto que gira alrededor del centro de la ventana, alejándose de él. Además observa tres comportamientos más o menos aleatorios:
- Su color varía constantemente, pero siempre con valores parecidos
- Su diámetro puede ser de 2 o de 6 píxeles, con una probabilidad del 50%
- Un 10% de las veces, se dibujará una recta entre el punto y el centro
//un número entero que se incrementará en cada ciclo float n = 0; //radio de la curva float r = 0; //coordenadas x e y de un punto float x = 0; float y = 0; //usaremos esta variable para asignarle valores aleatorios float num = 0; void setup(){ size(300,300); background(255); } void draw(){ //fijamos el color de cada punto en un número entre 25 y 225 stroke(25 + noise(n/10)*200); //desde el centro, un punto girará, alejandose de él una distancia igual a r x = width/2 + cos(n) * r; y = height/2 + sin(n) * r; point( x, y); num = random(1); //comprobamos un número aleatorio entre 0 y 1 con una cifra de control: 0.5 if(num > 0.5){ //si el número es mayor que 0.5 //el grosor del punto es de 6 strokeWeight(6); }else if(num < 0.1){ //si el número es menor que 0.1 //traza una línea verde entre el centro y el punto strokeWeight(1); stroke(#669933); line(width/2, height/2, x, y); }else{ //en cualquiero otro caso, el contorno es de 2 píxeles de ancho strokeWeight(2); } //establecemos la velocidad de increento de n y r n = n + 0.05; r = r + 0.2; //detenemos el bucle si el radio de la espiral crece demasiado if(r > width/2){ noLoop(); } }