fix: reimplement bezier with correct behavior #7
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Following the discussion in #4, this PR fixes the
bezier
function so that it behaves correctly.The problem was the invalid assumption that the
x
coordinate of the calculated point is equal to thetime
parameter in the equation. The new implementation performs a binary search to find a point whosex
coordinate is closer to thetime
parameter.The original point-calculating function was replaced with a simpler one, and turned out to be much more performant (even after some optimizations).
I came up with a few binary search implementations, but they all perform kinda the same. I also asked @MartinSStewart if he still had his binary search implementation - he had it, but for some reason it was much slower than others, so it was abandoned.
Here are the benchmarks. This PR uses
bezierBinFixed
andbezierPointSimple
implementations.The repo with the benchmarks can be found here.
Should the benchmarks be included in this repo?