From 85b0b09d34522f62d38bdee0ad9feeec71dc4174 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Wed, 4 May 2016 08:40:17 -0700 Subject: [PATCH] Minor optimization. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don’t test the bounding box on leaf nodes; test the circles. --- src/collide.js | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/collide.js b/src/collide.js index 4ecd2c1..b1fe8d3 100644 --- a/src/collide.js +++ b/src/collide.js @@ -39,23 +39,25 @@ export default function(radius) { } function apply(quad, x0, y0, x1, y1) { - if (x0 > xi + (r = ri + (rj = quad.r)) || x1 < xi - r || y0 > yi + r || y1 < yi - r) return true; - if (quad.length || (data = quad.data).index <= i) return; - var data, - x = xi - data.x - data.vx, - y = yi - data.y - data.vy, - l = x * x + y * y, - r, - rj; - if (l < r * r) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - l = (r - (l = Math.sqrt(l))) / l * strength; - node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); - node.vy += (y *= l) * r; - data.vx -= x * (r = 1 - r); - data.vy -= y * r; + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > i) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; } }