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
Publicar un comentario