From cf287b8dba3141a917bc35b8ed7b7a45f929bcdf Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Fri, 29 Apr 2016 09:33:17 -0700 Subject: [PATCH] Fix exact coincidence with d3.forceCollide. --- src/collide.js | 3 ++- src/link.js | 3 +-- src/manyBody.js | 3 +-- src/math.js | 2 ++ src/simulation.js | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 src/math.js diff --git a/src/collide.js b/src/collide.js index 84f5117..386bac4 100644 --- a/src/collide.js +++ b/src/collide.js @@ -1,5 +1,6 @@ import constant from "./constant"; import {quadtree} from "d3-quadtree"; +import {tau} from "./math"; function x(d) { return d.x + d.vx; @@ -51,7 +52,7 @@ export default function(radius) { l = x * x + y * y, r = radii[i] + radii[quad.data.index]; if (l < r * r) { - l = (r - (l = Math.sqrt(l))) / l; + l = l ? (r - (l = Math.sqrt(l))) / l : (l = Math.random() * tau, x = Math.cos(l), y = Math.sin(l), r - 1); vx += x * l, vy += y * l; } } diff --git a/src/link.js b/src/link.js index 3fa7810..639e98f 100644 --- a/src/link.js +++ b/src/link.js @@ -1,7 +1,6 @@ import {map} from "d3-collection"; import constant from "./constant"; - -var tau = 2 * Math.PI; +import {tau} from "./math"; function index(d, i) { return i; diff --git a/src/manyBody.js b/src/manyBody.js index 5a428a4..0141c8c 100644 --- a/src/manyBody.js +++ b/src/manyBody.js @@ -1,8 +1,7 @@ import constant from "./constant"; import {quadtree} from "d3-quadtree"; import {x, y} from "./simulation"; - -var tau = 2 * Math.PI; +import {tau} from "./math"; export default function() { var nodes, diff --git a/src/math.js b/src/math.js new file mode 100644 index 0000000..ec12fc7 --- /dev/null +++ b/src/math.js @@ -0,0 +1,2 @@ +export var pi = Math.PI; +export var tau = 2 * pi; diff --git a/src/simulation.js b/src/simulation.js index 4f6f3dc..6994f5d 100644 --- a/src/simulation.js +++ b/src/simulation.js @@ -1,6 +1,7 @@ import {dispatch} from "d3-dispatch"; import {map} from "d3-collection"; import {timer} from "d3-timer"; +import {pi} from "./math"; export function x(d) { return d.x; @@ -11,7 +12,7 @@ export function y(d) { } var initialRadius = 10, - initialAngle = Math.PI * (3 - Math.sqrt(5)); + initialAngle = pi * (3 - Math.sqrt(5)); export default function(nodes) { var simulation,