From 0334aa5e0051b59ce4050fd306b26119466e2991 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 21 May 2014 15:13:16 +0200 Subject: Move scripts to subdir Our scripts end up in js/, third-party libraries end up in lib/. --- js/collision.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 js/collision.js (limited to 'js/collision.js') diff --git a/js/collision.js b/js/collision.js new file mode 100644 index 0000000..acaf728 --- /dev/null +++ b/js/collision.js @@ -0,0 +1,36 @@ +/* globals d3 */ +'use strict'; +// source: http://mbostock.github.io/d3/talk/20111018/collision.html +function collisionTick(nodes) { + var q = d3.geom.quadtree(nodes), + i = 0, + n = nodes.length; + + while (++i < n) { + q.visit(collide(nodes[i])); + } +} + +function collide(node) { + var r = node.radius + 16, + nx1 = node.x - r, + nx2 = node.x + r, + ny1 = node.y - r, + ny2 = node.y + r; + return function(quad, x1, y1, x2, y2) { + if (quad.point && (quad.point !== node)) { + var x = node.x - quad.point.x, + y = node.y - quad.point.y, + l = Math.sqrt(x * x + y * y), + r = node.radius + quad.point.radius; + if (l < r) { + l = (l - r) / l * 0.5; + node.x -= x *= l; + node.y -= y *= l; + quad.point.x += x; + quad.point.y += y; + } + } + return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1; + }; +} -- cgit v1.2.1