source: node_modules/d3-hierarchy/src/treemap/binary.js@ e4c61dd

Last change on this file since e4c61dd was e4c61dd, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Prototype 1.1

  • Property mode set to 100644
File size: 1.3 KB
Line 
1export default function(parent, x0, y0, x1, y1) {
2 var nodes = parent.children,
3 i, n = nodes.length,
4 sum, sums = new Array(n + 1);
5
6 for (sums[0] = sum = i = 0; i < n; ++i) {
7 sums[i + 1] = sum += nodes[i].value;
8 }
9
10 partition(0, n, parent.value, x0, y0, x1, y1);
11
12 function partition(i, j, value, x0, y0, x1, y1) {
13 if (i >= j - 1) {
14 var node = nodes[i];
15 node.x0 = x0, node.y0 = y0;
16 node.x1 = x1, node.y1 = y1;
17 return;
18 }
19
20 var valueOffset = sums[i],
21 valueTarget = (value / 2) + valueOffset,
22 k = i + 1,
23 hi = j - 1;
24
25 while (k < hi) {
26 var mid = k + hi >>> 1;
27 if (sums[mid] < valueTarget) k = mid + 1;
28 else hi = mid;
29 }
30
31 if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
32
33 var valueLeft = sums[k] - valueOffset,
34 valueRight = value - valueLeft;
35
36 if ((x1 - x0) > (y1 - y0)) {
37 var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;
38 partition(i, k, valueLeft, x0, y0, xk, y1);
39 partition(k, j, valueRight, xk, y0, x1, y1);
40 } else {
41 var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;
42 partition(i, k, valueLeft, x0, y0, x1, yk);
43 partition(k, j, valueRight, x0, yk, x1, y1);
44 }
45 }
46}
Note: See TracBrowser for help on using the repository browser.