Skip to content

Instantly share code, notes, and snippets.

@jhubley
Last active August 29, 2015 14:17
Show Gist options
  • Save jhubley/2da15f7b9df942dd177d to your computer and use it in GitHub Desktop.
Save jhubley/2da15f7b9df942dd177d to your computer and use it in GitHub Desktop.
waves
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<body>
<script src="http://d3js.org/d3.v3.js"></script>
<script type="text/javascript">
svg = d3.select("body").append("svg")
var w = 2000,
h = 500,
begin = Date.now();
var lines = [ ];
var n = 5;
var motion = 80;
for (i in d3.range(n)){
var data = d3.range(motion)
lines.push({
width: 5,
height: 50,
speed: 100,
index: i,
data: data
})
}
var xscale = d3.scale.linear()
.domain([0,motion])
.range([0, w])
var omega = -.22
function line_maker( data, speed )
{
var freq = Math.PI*.4 + 3 * omega * data.index // * 3000
var svgline = d3.svg.line()
.x(function(d,i)
{
return xscale(d);
})
.y(function(d,i)
{
var theta = freq * d/motion * Math.PI * 4
var y = data.height * (Math.sin(theta + (n-data.index) * .1 * speed * .18 ));
return y
})
.interpolate("basis")
return svgline(data.data);
}
var spacing = 26;
function lineEnter(d, i) {
d3.select(this).selectAll("path.path")
.data([d])
.enter()
.append("svg:path")
.attr("class", "path")
.attr("d", function(d,i) { return line_maker( d, 0 )})
.attr("stroke-width", function(e,i) { return e.width;})
.attr("fill", "none")
update_spacing()
}
var svg = d3.select("svg")
.attr("width", w)
.attr("height", h)
.append("svg:g")
var line = svg.selectAll("g.line")
.data(lines)
.enter().append("svg:g")
.attr("class", "line")
.each(lineEnter);
var sm = .39
function update_spacing()
{
var th = spacing * n;
var hscale = d3.scale.linear()
.domain([0, n])
.range([0, h])
console.log("spacing", spacing)
d3.selectAll("g.line path")
.attr("transform", function(d, i) {
return "translate(" + [0, h/2 + th / 2 - spacing * d.index] + ")";
})
}
var color = d3.scale.linear()
.domain([-1, 1])
.interpolate(d3.interpolateRgb)
.range(['#112c6f', '#61a9db']) //hmm
var opacity = d3.scale.linear()
.domain([0, n])
.range([1, .2])
b = 1;
d3.timer(function() {
var elapsed = Date.now() - begin
var damp = .3
rotate = function(d,i) {
var speed = sm * d.speed * elapsed * .1
return "rotate(" + speed + ")";
};
line = d3.selectAll("g.line path")
.attr("d", function(d,i) {
//var speed = a * d.speed * elapsed + .01 * d.index
var speed = sm * .08 * elapsed + d.index * 4
return line_maker( d, speed )
})
.attr("stroke", function(d,i){ return color(d.index);})
.attr("stroke-opacity", function(d,i) { return opacity(d.index);})
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment