(radius)
| 8865 | } |
| 8866 | |
| 8867 | function collide(radius) { |
| 8868 | var nodes, |
| 8869 | radii, |
| 8870 | random, |
| 8871 | strength = 1, |
| 8872 | iterations = 1; |
| 8873 | |
| 8874 | if (typeof radius !== "function") radius = constant$4(radius == null ? 1 : +radius); |
| 8875 | |
| 8876 | function force() { |
| 8877 | var i, n = nodes.length, |
| 8878 | tree, |
| 8879 | node, |
| 8880 | xi, |
| 8881 | yi, |
| 8882 | ri, |
| 8883 | ri2; |
| 8884 | |
| 8885 | for (var k = 0; k < iterations; ++k) { |
| 8886 | tree = quadtree(nodes, x$3, y$3).visitAfter(prepare); |
| 8887 | for (i = 0; i < n; ++i) { |
| 8888 | node = nodes[i]; |
| 8889 | ri = radii[node.index], ri2 = ri * ri; |
| 8890 | xi = node.x + node.vx; |
| 8891 | yi = node.y + node.vy; |
| 8892 | tree.visit(apply); |
| 8893 | } |
| 8894 | } |
| 8895 | |
| 8896 | function apply(quad, x0, y0, x1, y1) { |
| 8897 | var data = quad.data, rj = quad.r, r = ri + rj; |
| 8898 | if (data) { |
| 8899 | if (data.index > node.index) { |
| 8900 | var x = xi - data.x - data.vx, |
| 8901 | y = yi - data.y - data.vy, |
| 8902 | l = x * x + y * y; |
| 8903 | if (l < r * r) { |
| 8904 | if (x === 0) x = jiggle(random), l += x * x; |
| 8905 | if (y === 0) y = jiggle(random), l += y * y; |
| 8906 | l = (r - (l = Math.sqrt(l))) / l * strength; |
| 8907 | node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); |
| 8908 | node.vy += (y *= l) * r; |
| 8909 | data.vx -= x * (r = 1 - r); |
| 8910 | data.vy -= y * r; |
| 8911 | } |
| 8912 | } |
| 8913 | return; |
| 8914 | } |
| 8915 | return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; |
| 8916 | } |
| 8917 | } |
| 8918 | |
| 8919 | function prepare(quad) { |
| 8920 | if (quad.data) return quad.r = radii[quad.data.index]; |
| 8921 | for (var i = quad.r = 0; i < 4; ++i) { |
| 8922 | if (quad[i] && quad[i].r > quad.r) { |
| 8923 | quad.r = quad[i].r; |
| 8924 | } |
nothing calls this directly
no test coverage detected