Fixing this for linear sliders is trivial, for perfect circle it's pretty easy, but for the bezier, it's way harder.
So with the linear sliders, just create a vector2 that goes from head to tail, rescale, and tadaaa.
For the perfect circle, we need to find the circle that lies on all 3 points. It's actually pretty easy to do.
For the beziers, we have a couple of choices:
We can first construct a bezier curve object, and find the value for the parameter "t" that corresponds to the new length of the slider. The first and last point remain on the curve. Then, we can try to move around the other control points in such a way that it minimizes the "integral of |B1(t) - B2(t)|dt" (B1 would be the first bezier, B2 would be the one with the updated tail, and the integral of |B1(t) - B2(t)|dt would give the summed error difference or something).
Just move the tail and don't talk about it.
Do like the first choice, but don't necessarily put the datapoint for the end of the slider on the end of the slider. What I mean by that is that the error function could probably be minimized further if the end point is optimized like the other datapoints. Another constraint to add though is that the last datapoint must be placed such that the length of the bezier from t=0 to t=1 is greater or equal to the slider length.
Fixing this for linear sliders is trivial, for perfect circle it's pretty easy, but for the bezier, it's way harder.
So with the linear sliders, just create a vector2 that goes from head to tail, rescale, and tadaaa.
For the perfect circle, we need to find the circle that lies on all 3 points. It's actually pretty easy to do.
For the beziers, we have a couple of choices: