GemaMachina Double Particle System
La Sencillez de lo Complejo
En este experimento artístico he intentado reunir muchos conceptos sencillos para conformar en si un “Todo” complejo y armónico.
Para ello he utilizado dos sistemas de partículas. Uno de ellos basado en un sistema orgánico (Curvas - Círculos) y el otro basado en un sistema geométrico (esquinas y líneas rectas - cuadrado).
Ambos sistemas de partículas poseen el mismo numero de partículas creando un equilibrio numérico en medio de un caos dado por posiciones aleatorias.
Este balance entre el equilibrio numérico y el caos debía de bailar en una perfecta danza de vida, conseguida por la función seno() condicionada a una frecuencia aleatoria multiplicada por la variable frameCount y sumándole la asincronicidad por el resultado de la distancia entre dicho elemento y el centro del lienzo.
El resultado es una especie de respiración geométrica a diferentes velocidades casi inapreciables y, aún así, diferentes entre si: los círculos desde su centro y los cuadrados desde la esquina superior izquierda, lo cual permite un ladeado diagonal en su crecimiento y decrecimiento.
Dichos elementos obedecen a unas gamas de colores similares creando una unidad cromática.
Cada uno de los diseños (orgánico y geométrico) posee la posibilidad de trabajar con dos versiones de dibujo: figuras simples o figuras concéntricas. La version de dibujo que aquí se ofrece es la de figuras simples.
Igualmente se implementan Vectores para el posible movimiento de cada uno de los elementos de cada uno de los dos sistemas de partículas. Aunque aqui no se muestran, tengo pensado desarrollar una segunda version que incorpore una subclase de algoritmos que se ejecuten de forma aleatoria o evolutiva (cambiando cada cierto numero de frameCount) y que ofrezca una mayor versatilidad y variabilidad a la Maquina de Dibujo.
Esto hace que la GemaMachina se convierta en una maquina de dibujo altamente variable en la cual se puedan explorar diferentes formas que sugestionen la experiencia que ofrece el Arte Generativo.
CÓDIGO
//(C)Sergio Salazar Latorre
//GemaMachina
//Sistema de Particulas
let epl=4 //elementos por lado
let l=600 //lado
let D = l/epl //Diametro de cada elemento
let r=D/2 //Radio de cada elemento
let x,y //posiciones x e y de cada elemento
let np=epl*epl //numero de particulas
let pc=Array(np) //array del numero de particulas
let ps=Array(np) //array del numero de particulas
let n="GemaMachina DoubleParticleSystem"
function setup(){
createCanvas(l,l);
for(let i=0; i<np;i++){
pc[i] = new GemaMachina(random(0,l),
random(0,l),1)
ps[i] = new GemaMachina(random(0,l),
random(0,l),2)
}
}
function draw() {
background(0,15);
noFill()
stroke(255)
for(let i=0; i<np; i++){
pc[i].ver()
ps[i].ver()
}
push()
stroke(255)
strokeWeight(2)
fill(0)
text(n,10,l-10*3)
text("(C)Sergio Salazar Latorre", 10, l-9*2)
text("Dedicado a mi musa, mi reina, mi inspiracion. A mi mujer Gema", 10,l-5)
strokeWeight(1)
}
class GemaMachina
{
constructor(x,y,tipo){
this.x=x
this.y=y
this.D=D
this.r=r
this.V = createVector(this.x, this.y)
this.frecuencia = random(0.02, 0.009)
this.mD=1
this.c=this.colorAleatorio()
this.tipo = tipo
}
ver(){
this.modularD()
//this.actualizarVectores()
if(this.tipo==2){
this.dibujarCirculo()
} else {
this.dibujarCuadrado()
}
//this.dibujarCirculo()
//this.dibujarCirculosConcentricos()
//this.dibujarCuadrado()
//this.dibujarCuadradosConcentricos()
}
modularD(){
this.mD = sin(frameCount*this.frecuencia +
1*dist(l/2,l/2,
this.x, this.y))
}
actualizarVectores(){
this.V.add(random(-5,5), random(-5,5))
if(this.V.x<0 || this.V.x>l ||
this.V.y<0 || this.V.y>l){
this.V.add(random(0,l), random(0,l))
}
}
dibujarCirculo(){
circle(this.V.x, this.V.y, this.mD*D)
}
dibujarCirculosConcentricos(){
push()
stroke(this.c)
circle(this.V.x, this.V.y, this.mD*(D))
circle(this.V.x, this.V.y, this.mD*(D/4*3))
circle(this.V.x, this.V.y, this.mD*(D/4*2))
}
dibujarCuadrado(){
stroke(this.c)
square(this.V.x, this.V.y, this.mD*D)
}
dibujarCuadradosConcentricos(){
stroke(this.c)
square(this.V.x, this.V.y, this.mD*(D))
square(this.V.x, this.V.y, this.mD*(D/4*3))
square(this.V.x, this.V.y, this.mD*(D/4*2))
}
colorAleatorio(){
if(this.tipo==1){
return color(random(83, 2),
random(193,2),
random(328,200))
} else{
return color(random(255-83, 255-2),
random(255-193,255-2),
random(255-328,255-200))
}
}
}
Comentarios
Publicar un comentario