/* Inspired by Lee Byron's test data generator. */ function stream_layers(n, m, o) { if (arguments.length < 3) o = 0; function bump(a) { var x = 1 / (.1 + Math.random()), y = 2 * Math.random() - .5, z = 10 / (.1 + Math.random()); for (var i = 0; i < m; i++) { var w = (i / m - y) * z; a[i] += x * Math.exp(-w * w); } } return d3.range(n).map(function() { var a = [], i; for (i = 0; i < m; i++) a[i] = o + o * Math.random(); for (i = 0; i < 5; i++) bump(a); return a.map(stream_index); }); } /* Another layer generator using gamma distributions. */ function stream_waves(n, m) { return d3.range(n).map(function(i) { return d3.range(m).map(function(j) { var x = 20 * j / m - i / 3; return 2 * x * Math.exp(-.5 * x); }).map(stream_index); }); } function stream_index(d, i) { return {x: i, y: Math.max(0, d)}; }