Skip to content

Instantly share code, notes, and snippets.

@hannahherbig
Created November 22, 2016 17:35
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 hannahherbig/61e8755fdcf23b15bef32a8856a74d99 to your computer and use it in GitHub Desktop.
Save hannahherbig/61e8755fdcf23b15bef32a8856a74d99 to your computer and use it in GitHub Desktop.
shellsort voronoi
<!DOCTYPE html>
<meta charset="utf-8">
<style>
path { stroke: none; }
</style>
<svg width="960" height="500"></svg>
<script src="//d3js.org/d3.v4.min.js"></script>
<script>
var svg = d3.select('svg')
var w = +svg.attr('width')
var h = +svg.attr('height')
var n = 256
var data = d3.range(n)
var x = d3.scaleLinear().domain([0, n]).range([0, w])
var y = d3.scaleLinear().domain([0, n]).range([0, h])
var z = d3.scaleSequential(d3.interpolateRainbow).domain([0, n])
var g = svg.append('g')
var voronoi = d3.voronoi()
.x(x)
.y(function (d, i) { return y(i) })
.extent([[x(0), y(0)], [x(n), y(n)]])
function* sort () {
var t = [701, 301, 132, 57, 23, 10, 4, 1]
//t = [5, 3, 1]
for (var k = 0; k < t.length; ++k) {
var h = t[k]; console.log(h)
for (var j = h; j < n; ++j) {
var i = j - h, r = data[j], t, done = false
while (i > -1 && !done) {
if (r < data[i]) {
yield data
;[data[i+h], data[i]] = [data[i], data[i+h]]
i -= h
} else {
done = true
}
}
data[i+h] = r
}
}
}
var gen
function reset() {
d3.shuffle(data)
gen = sort()
}
reset()
d3.timer(function () {
var v
if ((v = gen.next()).done) {
reset()
return
}
var diagram = voronoi(v.value)
var poly = g.selectAll('path').data(diagram.polygons())
poly.enter().append('path')
.merge(poly)
.attr('d', function (d) { return d ? 'M' + d.join('L') + 'Z' : null })
.attr('fill', function (d) { return z(d.data) })
//.classed('highlight', function (d) { return v.value.indexOf(d.data) !== -1 })
poly.exit().remove()
})
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment