| 130794 | -1 |
| 130795 | ], dx = 960, dy = 500, k = 2; // log2(cellSize) |
| 130796 | function density(data, counts) { |
| 130797 | const rx = radius(bandwidth[0], data, x) >> k, // blur x-radius |
| 130798 | ry = radius(bandwidth[1], data, y) >> k, // blur y-radius |
| 130799 | ox = rx ? rx + 2 : 0, // x-offset padding for blur |
| 130800 | oy = ry ? ry + 2 : 0, // y-offset padding for blur |
| 130801 | n = 2 * ox + (dx >> k), // grid width |
| 130802 | m = 2 * oy + (dy >> k), // grid height |
| 130803 | values0 = new Float32Array(n * m), values1 = new Float32Array(n * m); |
| 130804 | let values = values0; |
| 130805 | data.forEach((d)=>{ |
| 130806 | const xi = ox + (+x(d) >> k), yi = oy + (+y(d) >> k); |
| 130807 | if (xi >= 0 && xi < n && yi >= 0 && yi < m) values0[xi + yi * n] += +weight(d); |
| 130808 | }); |
| 130809 | if (rx > 0 && ry > 0) { |
| 130810 | blurX(n, m, values0, values1, rx); |
| 130811 | blurY(n, m, values1, values0, ry); |
| 130812 | blurX(n, m, values0, values1, rx); |
| 130813 | blurY(n, m, values1, values0, ry); |
| 130814 | blurX(n, m, values0, values1, rx); |
| 130815 | blurY(n, m, values1, values0, ry); |
| 130816 | } else if (rx > 0) { |
| 130817 | blurX(n, m, values0, values1, rx); |
| 130818 | blurX(n, m, values1, values0, rx); |
| 130819 | blurX(n, m, values0, values1, rx); |
| 130820 | values = values1; |
| 130821 | } else if (ry > 0) { |
| 130822 | blurY(n, m, values0, values1, ry); |
| 130823 | blurY(n, m, values1, values0, ry); |
| 130824 | blurY(n, m, values0, values1, ry); |
| 130825 | values = values1; |
| 130826 | } // scale density estimates |
| 130827 | // density in points per square pixel or probability density |
| 130828 | const s = counts ? Math.pow(2, -2 * k) : 1 / (0, _d3Array.sum)(values); |
| 130829 | for(let i = 0, sz = n * m; i < sz; ++i)values[i] *= s; |
| 130830 | return { |
| 130831 | values: values, |
| 130832 | scale: 1 << k, |
| 130833 | width: n, |
| 130834 | height: m, |
| 130835 | x1: ox, |
| 130836 | y1: oy, |
| 130837 | x2: ox + (dx >> k), |
| 130838 | y2: oy + (dy >> k) |
| 130839 | }; |
| 130840 | } |
| 130841 | density.x = function(_) { |
| 130842 | return arguments.length ? (x = number(_), density) : x; |
| 130843 | }; |