Note the link distance is specified by 'peeking ahead' to the anticipated position of the node ⟨x + vx,y + vy⟩.
This has implications in energy-conservation, e.g. the two pendulum based blocks here (12) and in the examples in this notebook, despite all the examples explicitly specifying 0 alphaDecay and velocityDecay.
Perhaps the documentation should alert users to this?
Alternatively, and since a change away from iterative relaxation would render the iterations option nonsensical, the function could handle iterations(0) as a special case doing the following instead?
x = target.x - source.x || jiggle(random);
y = target.y - source.y || jiggle(random);
Initially posted as vasturiano/d3-force-registry#8, was prompted to also post this here for broader visibility.
The documentation suggests
d3.forceLink
does the following (emphasis added):Unfortunately, this might be misleading as
d3.forceLink
actually performs iterative relaxation. The responsible lines in the source code are:Note the link distance is specified by 'peeking ahead' to the anticipated position of the node ⟨x + vx,y + vy⟩.
This has implications in energy-conservation, e.g. the two pendulum based blocks here (1 2) and in the examples in this notebook, despite all the examples explicitly specifying 0
alphaDecay
andvelocityDecay
.Perhaps the documentation should alert users to this? Alternatively, and since a change away from iterative relaxation would render the iterations option nonsensical, the function could handle
iterations(0)
as a special case doing the following instead?