relaxation CA
HTML
<canvas id=c width=200 height=200></canvas>
<!--pre id=pre_stat></pre-->
<canvas id=c_stat width=300 height=100></canvas>
CSS
canvas {
box-shadow:0 0 10px;
}
#c {
width: 500px;
}
JavaScript
var c = document.getElementById("c")
var ctx = c.getContext("2d")
var h = c.height
var w = c.width
var id = ctx.createImageData(w, h)
var c_stat = document.getElementById("c_stat")
var ctx_stat = c_stat.getContext("2d")
var h_stat = c_stat.height
var w_stat = c_stat.width
var id_stat = ctx_stat.createImageData(w_stat, h_stat)
var t = 0
var statEl = document.getElementById("pre_stat")
var FORCE = 1/8;
var FRAME_SKIP = 2;
var STAT_SPEED = 1;
function normalize(x) {
var scale = 2 / (x[0] * x[0] + x[1] * x[1] + x[2] * x[2] + 1);
x[0] *= scale;
x[1] *= scale;
x[2] *= scale
}
var model = Array(w);
var newmodel = Array(w);
for (var i = 0; i < w; i++) {
model[i] = Array(h);
newmodel[i] = Array(h);
for (var j = 0; j < h; j++) {
model[i][j] = [(2 * Math.random() - 1) * 1,
(2 * Math.random() - 1) * 0,
(2 * Math.random() - 1) * 0];
newmodel[i][j] = [0, 0, 0];
}
}
stat_window = Array(w_stat / STAT_SPEED);
stat_min = undefined;
stat_max = undefined;
function render_stat(model, ctx, id) {
//statEl.textContent = JSON.stringify(model, true);
var drop = stat_window.shift();
stat_window.push(model.forceSS);
if(model.forceSS > stat_max) stat_max = model.forceSS;
if(model.forceSS < stat_min) stat_min = model.forceSS;
if(drop == stat_min || drop == stat_max || stat_min == 1/0){
stat_min = 1/0;
stat_max = -1/0;
for(var i=0; i<stat_window.length; i++){
if(stat_min > stat_window[i]){
stat_min = stat_window[i]
}
if(stat_max < stat_window[i]){
stat_max = stat_window[i]
}
}
}//end recompute extrema
v_scale = h_stat / (stat_min - stat_max);
ctx.clearRect(0, 0, w_stat, h_stat);
ctx.beginPath();
ctx.moveTo(0, (stat_window[0] - stat_max) * v_scale);
debugger;
for(var i=0; i<stat_window.length; i++){
ctx.lineTo(i *...