Más sobre condicionales

test02
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:

  1. Su color varía constantemente, pero siempre con valores parecidos
  2. Su diámetro puede ser de 2 o de 6 píxeles, con una probabilidad del 50%
  3. 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();
  }
}

Leave a Comment.