Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

定常波

/**
* Standing Waves
*
* @author aa_debdeb
* @date 2015/10/08
*/

ArrayList<StandingWave> standingWaves;

void setup(){
  size(500, 500);
  smooth();
  frameRate(24);
  
  standingWaves = new ArrayList<StandingWave>();
  float angularFrequency = TWO_PI;
  for(int i = 0; i < 30; i++){
    standingWaves.add(new StandingWave(angularFrequency, 200));
    angularFrequency /= 2.0;  
  }
}

void draw(){
  background(0);
  for(StandingWave standingWave: standingWaves){
    standingWave.draw();
  } 
}

class StandingWave{

  float angularFrequency;
  float waveLength;
  float waveNumber; 
  
  StandingWave(float angularFrequency, float waveLength){
    this.angularFrequency = angularFrequency;
    this.waveNumber = TWO_PI / waveLength;
  }
  
  void draw(){
    stroke(255);
    noFill();
    pushMatrix();
    translate(width / 2 - 200, height / 2);
    beginShape();
    for(int x = 0; x <= 400; x+= 1){
      vertex(x, getValue(x));
    }
    endShape();
    popMatrix();
  }
  
  float getValue(float x){
    return 100 * (sin(angularFrequency * frameCount - waveNumber * x + HALF_PI) + sin(angularFrequency * frameCount + waveNumber * x - HALF_PI));
  }
  
}