diff options
author | pommicket <leonardomtenenbaum@gmail.com> | 2016-07-01 17:43:58 -0400 |
---|---|---|
committer | pommicket <leonardomtenenbaum@gmail.com> | 2016-07-01 17:43:58 -0400 |
commit | be06edbcfd1213ea1658d36f8934493a92205aac (patch) | |
tree | 28dca6130833e3a770611961bc6559c08bed4161 /js/AutoHarmonograph.js |
Created pommicket.github.io
Diffstat (limited to 'js/AutoHarmonograph.js')
-rw-r--r-- | js/AutoHarmonograph.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/js/AutoHarmonograph.js b/js/AutoHarmonograph.js new file mode 100644 index 0000000..b4158db --- /dev/null +++ b/js/AutoHarmonograph.js @@ -0,0 +1,107 @@ +var t = 0; +var pp; +var Ax, Ay, fx, fy, dx, dy, basepx, basepy; +var AMAX = 1000; +var DMIN = 0.0001; +var DMAX = 0.0003; +var FMAX = 0.1; +var PMAX = 6.28; +var ADIF = AMAX / 10; +var DDIF = DMAX / 10; +var FDIF = FMAX / 10; +var PDIF = PMAX / 10; + + +function sinExp(A, t, f, p, d) +{ + return A*sin(t*f + p) * exp(-d*t); +} + +var Pendulum = function() +{ + this.xy = floor(random(2)); + if (this.xy === 0) + this.p = random(-PDIF, PDIF)+basepx; + else + this.p = random(-PDIF, PDIF)+basepy; + + pendulums.push(this); +} + +Pendulum.prototype.swing = function() +{ + if (this.xy === 0) + { + var x = sinExp(Ay, t, fx, this.p, dx); + var y = 0; + } + else + { + var x = 0; + var y = sinExp(Ax, t, fy, this.p, dy); + } + return [x, y]; +} + +var pendulums = []; + + +function calculate() +{ + var xsum = 0; + var ysum = 0; + var sw; + for (var i = 0; i < pendulums.length; i++) + { + sw = pendulums[i].swing(); + xsum += sw[0]; + ysum += sw[1]; + } + return [xsum/pendulums.length, ysum/pendulums.length]; +} + + +function setup() +{ + document.getElementById("npendulums").value = 10; + document.getElementById("DMAX").value = DMAX; +} + +function start() +{ + + createCanvas(800, 800); + frameRate(1000); + DMAX = document.getElementById("DMAX").value; + basepx = random(PMAX); + basepy = random(PMAX); + Ax = random(AMAX); + Ay = random(AMAX); + fx = random(FMAX); + fy = random(FMAX); + dx = random(DMIN, DMAX); + dy = random(DMIN, DMAX); + + pendulums = []; + + for (var i = 0; i < document.getElementById("npendulums").value; i++) + new Pendulum(); + +} + +function saveCanvas() +{ + save("AutoHarmonograph.png"); +} + +function draw() +{ + translate(width/2, height/2); + curr = calculate(); + if (t !== 0) + line(pp[0], pp[1], curr[0], curr[1]); + + + t++; + pp = curr; +} |