Campos de Flujo: Lydia Soul Essence

 

(Inspirado en un código de Julien Gachadoat)

Información de la función noise()

Información sobre el Profesor Ken Perlin, creador del ruido de Perlin en los años 80s

Proyección Artística 

Los campos de flujos son susceptibles de ser interpretados artísticamente como senderos del tiempo donde las particulas siguen senderos a lo largo del tiempo frameCount del programa.

Resulta realmente interesante observar como dichos senderos comienzan a crearse poco a poco, primero con líneas inteligibles para después convertirse en auténticos surcos luminosos que marcan uno o varios senderos serpenteantes bien definidos.

La idea de Lydia Soul Essence (La Esencia del Alma de Lydia) ha sido plasmar como la vida se va plasmando, a partir de los numerosos detalles y experiencias vividas, en un alma que lentamente conforma la experiencia que acaba por convertirse en luz total.

A lo largo de su creación, al principio el color negro representa a la nada. Las líneas finas e inteligibles a la inocencia. Los senderos marcados y gruesos a la experiencia. El blanco final al ser de luz en el que nos convertimos alcanzando la experiencia plena del alma.

La esencia en si no se plasma en un convertimiento total hacia el blanco sino, mas bien, en todo el proceso en el que podemos observar que sea el tiempo que sea, siempre existen líneas finas que simbolizan la inocencia o pureza que el alma obtiene de cualquier momento vivido. 

Al igual que cualquier ser es diferente y, entendiendo que cada nueva actualización de la pagina ofrece ejecuciones diferentes y, por lo tanto, seres diferentes y almas diferentes, sus representaciones finales igualmente deben de ser diferentes. Detalle que se ha cuidado en plasmar.

La lentitud de su ejecución intenta plasmar el estado atemporal de la eternidad mostrando, para cada nuevo cambio brusco efectuado, una suave pragmacion de dicha experiencia en el alma.

Dedicado con mucho cariño a mi madre, he querido plasmar toda la belleza vivida en pocos segundos o minutos. 


Código 

let nE=10000 //numero de elementos

let nS=0.01 //escalado de ruido

let nA=370 //angulo del ruido

let nV=1 //velocidad del ruido

let aMax=2000 //edad maxima


let p = Array(nE) //array de particulas


let l=600; //lado 

let n

function setup() {

  createCanvas(l, l); // canvas de lxl

  background(0); //fondo negro

  angleMode(DEGREES) //angulos en grados

  

  

  //cargar Particulas

  for(let i=0; i<nE; i++){

    //llena el array de particulas con particulas situadas en posiciones al azar

    p[i] = new Particula(random(0,l),

                        random(0,l))

  }

  n = "Lydia Soul Essence " + int(random(0,12021966)) + "    Dedicado a mi madre con todo mi amor"

}


function draw() {

  //color de la linea blanco

  // con una transparecia concedida por 

  // la funcion map a partir del numero de frame

  // con unos valores que van desde 1 a la edad maxima y convirtiendolos en el valor proporcional desde negro 100 a negro puro

  stroke(255, map(frameCount, 1, aMax, 0,100))

  

  //Visualizar las Particulas

  for(let i=0; i<nE; i++){

    //recorre el array de particulas ejecutando el metodo de la clase dibujarParticula()

    p[i].dibujarParticula()

  }

  fill(0,0,255)

  strokeWeight(4)

  stroke(0,255,255)

  

  text(n,10, l-10)

  strokeWeight(1)

  stroke(255, map(frameCount, 1, aMax, 0,100))

  

}


class Particula

{

  constructor(x,y){

    this.x=x //x

    this.y=y //y

    this.vx=random(-2,3) //velocidad x

    this.vy=random(-3,2) //velocidad y

  }

  

  dibujarParticula(){

    //Creamos el ruido a partir de:

    // la posicion x e y de cada particula

    // modulada por el angulo del ruido

    let n=nA*noise(nS*this.x, 

                  nS*this.y)

    //hacemos que la velocidad se iguale a:

    // el coseno negativo del ruido para y

    // el seno positivo del ruido para x

    this.vy = -cos(n)

    this.vx = sin(n)

    

    //calculamos la posicion de x e y de cada visualizacion sumandole a la actual sus correspondientes velocidades vx y vy

    this.x += this.vx

    this.y += this.vy

    

    //Controlamos que cuando la particula exceda de los rangos del canvas o lienzo se vuelva a reubicar en una posicion aleatoria

    if(this.x<0 || this.x>l ||

      this.y<0 || this.y>l){

      this.x=random(0,l)

      this.y=random(0,l)

    }

   

    //pintamos el motivo de la particula en su posicion x e y correspondiente

    point(this.x, this.y)

  }

}




Comentarios