Skip to content

Instantly share code, notes, and snippets.

@georules
Created December 9, 2012 02:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save georules/4243077 to your computer and use it in GitHub Desktop.
Save georules/4243077 to your computer and use it in GitHub Desktop.
Another Inlet
{"description":"Another Inlet","endpoint":"","display":"webgl","public":true,"require":[],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"tab":"edit","display_percent":0.59513888888889,"play":false,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"hidepanel":false}
var domain = d3.range(0,Math.PI,0.1);
var data = [];
for (i in domain) {
p = domain[i];
data.push(Math.abs(Math.cos(p)*9.8)*(-1));
}
//console.log(data); // simulate drop data
//http://newcome.wordpress.com/2009/11/04/simple-fourier-transform-in-javascript/
function fourier( in_array ) {
var len = in_array.length;
var output = [];
for( var k=0; k < len; k++ ) {
var real = 0;
var imag = 0;
for( var n=0; n < len; n++ ) {
real += in_array[n]*Math.cos(-2*Math.PI*k*n/len);
imag += in_array[n]*Math.sin(-2*Math.PI*k*n/len);
}
output.push( [ real, imag ] )
}
return output;
}
var tscale = d3.scale.linear()
.domain([0,data.length])
.range(["#00FF00", "#FF0000"])
.interpolate(d3.interpolateHsl);
var pr = 12;
function makeCube(t,pos) {
var col = parseInt(tscale(t).slice(1,7), 16);
var materials = d3.range(6).map(function(d) {
return new THREE.MeshBasicMaterial( { color: col } )
})
var cube = new THREE.Mesh( new THREE.CubeGeometry( pr, pr, pr, 1, 1, 1, materials ), new THREE.MeshFaceMaterial() );
tributary.scene.add( cube );
cube.position = pos;
return cube;
}
var zoom = 9;
var newdata = [];
var mean = d3.mean(data);
for (d in data) {
var cube = makeCube(d,{x:d*zoom-300, y:data[d]+200 , z:0});
newdata.push(data[d]-mean);
}
var f = fourier(newdata);
N = data.length;
//http://www.adamsiembida.com/node/23
//http://tech.groups.yahoo.com/group/SeattleRobotics/message/44971
//http://www.edaboard.com/thread107784.html
var locs = [];
for (d in f) {
// FFT to x in frequency domain
var location = Math.abs(f[d][0]) / Math.pow((2*Math.PI*N),2);
locs.push(location);
}
// inverse fft 1/N*fft to translate frequency back to time domain
ifft = fourier(locs);
locs = []
for (l in ifft) {
locs.push(ifft[l][0]/N);
}
for (d in locs) {
var cube = makeCube(d,{x:d*zoom-300, y:locs[d]-100 , z:0});
}
console.log(data);
console.log(locs);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment