d3-force icon indicating copy to clipboard operation
d3-force copied to clipboard

consider making .tick() reversable / accept negative iterations

Open jleonard-r7 opened this issue 3 years ago • 6 comments

This would be a fairly trivial change to: https://github.com/d3/d3-force/blob/main/src/simulation.js#L39-L61

Reverse the arithmetic operations (+= => -=) and decays to excitements (via 1/x).

Would there be any chance you'd be willing to accept a PR for this change?

jleonard-r7 avatar Oct 20 '22 23:10 jleonard-r7

https://scicomp.stackexchange.com/questions/36394/time-reversibility-of-velocity-verlet-algorithm

jleonard-r7 avatar Oct 21 '22 17:10 jleonard-r7

I'm curious about this. Wouldn't it also work by changing the sign of alpha? Could be nice to prototype in a notebook.

Fil avatar Oct 21 '22 23:10 Fil

As I mentioned, all arithmetic operations need to be reversed (addition to subtraction) and the reciprocals of the multipliers taken and used instead (including those for alpha).

jleonard-r7 avatar Oct 22 '22 00:10 jleonard-r7

Can anyone say if a pull request for this functionality would be accepted?

jleonard-r7 avatar Oct 27 '22 17:10 jleonard-r7

It would certainly be considered! My question about prototyping is also a way to ask how this could be used in a concrete application.

Fil avatar Oct 28 '22 08:10 Fil

I could imagine the tick being tied to a mouse wheel; up to go forward in time and down to go backward in time. This was our intended use case for a demo animation we are working on.

In fact, such live demos exist on the internet now (attached to a slider control rather than the mouse wheel) but they are either memoizing the computed frames or recomputing from the beginning (neither of which is optimal since they waste either CPU or memory).

See the “frame” sliders on this example: https://observablehq.com/@ben-tanen/a-tutorial-to-using-d3-force-from-someone-who-just-learned-ho

jleonard-r7 avatar Oct 28 '22 18:10 jleonard-r7