Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

consider making .tick() reversable / accept negative iterations #208

Open
jleonard-r7 opened this issue Oct 20, 2022 · 6 comments
Open

consider making .tick() reversable / accept negative iterations #208

jleonard-r7 opened this issue Oct 20, 2022 · 6 comments

Comments

@jleonard-r7
Copy link

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?

@Fil
Copy link
Member

Fil commented Oct 21, 2022

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

@jleonard-r7
Copy link
Author

jleonard-r7 commented Oct 22, 2022

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
Copy link
Author

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

@Fil
Copy link
Member

Fil commented Oct 28, 2022

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

@jleonard-r7
Copy link
Author

jleonard-r7 commented Oct 28, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants