| 6621 | threshold = constant$5(20); |
| 6622 | |
| 6623 | function grid(data) { |
| 6624 | var values = new Float32Array(n * m), |
| 6625 | pow2k = Math.pow(2, -k), |
| 6626 | i = -1; |
| 6627 | |
| 6628 | for (const d of data) { |
| 6629 | var xi = (x(d, ++i, data) + o) * pow2k, |
| 6630 | yi = (y(d, i, data) + o) * pow2k, |
| 6631 | wi = +weight(d, i, data); |
| 6632 | if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) { |
| 6633 | var x0 = Math.floor(xi), |
| 6634 | y0 = Math.floor(yi), |
| 6635 | xt = xi - x0 - 0.5, |
| 6636 | yt = yi - y0 - 0.5; |
| 6637 | values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi; |
| 6638 | values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi; |
| 6639 | values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi; |
| 6640 | values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi; |
| 6641 | } |
| 6642 | } |
| 6643 | |
| 6644 | blur2({data: values, width: n, height: m}, r * pow2k); |
| 6645 | return values; |
| 6646 | } |
| 6647 | |
| 6648 | function density(data) { |
| 6649 | var values = grid(data), |