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));
}
}