Wave Equation

What

弦の振動を波動方程式を解いてシミュレーションしています。
初期状態はinitForm関数で決定されており、今はsin関数の10乗のグラフの形をしています。

How


var prev_steps = new Array(400);
var current_steps = new Array(402);
var results = new Array(400);
var c = 0.9;

function setup() {
  createCanvas(400, 400);
  current_steps[0] = 0;
  for(i = 0;i<400; i++){
    var y = initForm(i);
    prev_steps[i] = y;
    current_steps[i + 1] = y;
  }

  current_steps[401] = 0;
}

function draw() {
  stroke("#ffffff");
  background(0);
  for(i=0;i<400;i++){
    results[i] = c * (current_steps[i] + current_steps[i + 2] - 2 * current_steps[i + 1]) + 2 * current_steps[i + 1] - prev_steps[i];
    if(i > 0){
      line(i - 1, results[i -1] + 200, i, results[i] + 200);
    }
  }
  for(i = 0; i < 400; i++){
    prev_steps[i] = current_steps[i + 1];
    current_steps[i + 1] = results[i];
  }
}


function initForm(x){
  var radias = 360 * x / 400;
  return parseInt(pow(sin(radians(radias)), 10) * 200);
}