Fusión de Flujo (Mi regalo de Reyes Magos para todos Vosotros) (3/3)

 





CÓDIGO

//(C)Sergio Salazar Latorre
// FDF - Fusion de Flujo 

let l = 600
let np = 10
let c = Array(np)
let s = Array(np)


function setup() {
  createCanvas(l,l);
  rectMode(CENTER)
  angleMode(DEGREES)
  for(let i=0; i<np; i++){
    c[i] = new FDF(random(0,l),
                  random(0,l),
                  1)
    s[i] = new FDF(random(0,l),
                  random(0,l),
                  2)
  }
}

function draw() {
  background(0);
  noFill()
  stroke(255)
  
  for(let i=0; i<np; i++){
    c[i].dibuja()
    s[i].dibuja()
  }
  
  firma()
}

class FDF
{
  constructor(x,y,cc){
    this.x=x
    this.y=y
    this.cc=cc
    this.D=random(10,80)
    this.r=this.D/2
    this.naD=this.D*5/8
    this.na2D=this.D*3/8
    this.nar=this.r*5/8
    this.na2r=this.r*3/8
    this.cD=1
  }
  
  dibuja(){
    //cc=1 circulo
    //cc=2 cuadrado

      if(this.cc==1){
        this.dibujaCirculo()
      } else if(this.cc==2){
        this.dibujaCuadrado()
      }
    }
  dibujaCirculo(){
      this.prepararMovimiento(2)
      this.ponCirculo(this.x, this.y, this.D*this.cD)
      this.crearVariaciones()
    }
    
    dibujaCuadrado(){
      this.prepararMovimiento(1)
      this.ponCuadrado(this.x, this.y, this.D*this.cD)
      this.crearVariaciones()
  }
  
  ponCirculo(x,y,D){
    circle(x,y,D);
  }
  ponCuadrado(x,y,D){
    square(x,y,D);
  }
  
  
  crearVariaciones(){
    if(this.cc==1){
      this.concentricos(3)
    } else if(this.cc==2){
      this.concentricos(2)
    }
  }
  
  concentricos(partes){
    let DD = this.D/partes
    
    for(let i=1; i<partes;i++){
      this.prepararMovimiento(1)
      if(this.cc==1){
        this.ponCirculo(this.x, this.y, this.D-DD*i*this.cD)
      } else if(this.cc==2){
        this.ponCuadrado(this.x, this.y, this.D-DD*i*this.cD)
      }
    }
  }
  
  prepararMovimiento(cm){
    //cm=1 utilizar funcion sin() para variar el diametro
    //cm=2 caer y continuar por arriba
    
    if(cm==1){
      this.mDiametro()
    } else if(cm==2){
      this.mCaer()
    }
  }
  
  mDiametro(){
    let frecuencia=0.1
    this.cD = sin(frameCount*frecuencia+1*
                 dist(this.x, this.y, l/2, l/2))
  }
  
  mCaer(){
    this.y++
    if (this.y>l){
      this.y=0
    }
    
  }
}


function firma(){
  push()
  fill(255,0,0)
  strokeWeight(3)
  stroke(255)
  text("FDF - Fusión de Flujo - 003- Crear Variaciones", 10, l-9*2)
  text("(C)Sergio Salazar Latorre", 10, l-5)
  pop()
}




Comentarios

Entradas populares