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