From f5ba7f17db7c98aa1aaf7318cb4bd2ce80fe8289 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 7 Jun 2016 12:27:20 -0700 Subject: [PATCH] Slightly cleaner. --- src/treemap/binary.js | 66 +++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/treemap/binary.js b/src/treemap/binary.js index c39bba20..98e5a4bd 100644 --- a/src/treemap/binary.js +++ b/src/treemap/binary.js @@ -1,44 +1,44 @@ export default function(parent, x0, y0, x1, y1) { - var nodes = parent.children; - var sums = [0]; - for (var i = 0; i < nodes.length; i++) { - sums[i+1] = sums[i] + nodes[i].value; + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); + + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; } - partition(nodes, sums, 0, nodes.length, parent.value, x0, y0, x1, y1); -} + partition(0, n, parent.value, x0, y0, x1, y1); -function partition(nodes, sums, i, j, value, x0, y0, x1, y1) { - if (i >= j - 1) { - nodes = nodes[i]; - nodes.x0 = x0, nodes.y0 = y0; - nodes.x1 = x1, nodes.y1 = y1; - return; - } + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } - var offset = sums[i]; - var goal = (value / 2) + offset; + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; - var k = i+1, ub = j-1, mid; - while(k < ub) { - mid = (k + ub) >>> 1; - if (sums[mid] < goal) { - k = mid+1; - } else { - ub = mid; + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; } - } - var valueLeft = sums[k] - offset; - var valueRight = value - valueLeft; + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; - if ((y1 - y0) > (x1 - x0)) { - var yk = (y0 * valueRight + y1 * valueLeft) / value; - partition(nodes, sums, i, k, valueLeft, x0, y0, x1, yk); - partition(nodes, sums, k, j, valueRight, x0, yk, x1, y1); - } else { - var xk = (x0 * valueRight + x1 * valueLeft) / value; - partition(nodes, sums, i, k, valueLeft, x0, y0, xk, y1); - partition(nodes, sums, k, j, valueRight, xk, y0, x1, y1); + if ((y1 - y0) > (x1 - x0)) { + var yk = (y0 * valueRight + y1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } else { + var xk = (x0 * valueRight + x1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } } }