Unexpectedly for myself, I’m hung up on this issue.
Suppose there is an array with a length of N elements. And we need to take an element from there, but not by index, but by value t = [0…1] (from 0 to 1 both inclusive).
That is, the problem is reduced to a linear interpolation of the float value into the index of the array.
int index = (int) Mathf.Lerp(0, N, t);
t = 1, then
index = N which is out of array’s range.
We can fix this as follows:
int index = Mathf.Clamp((int) Mathf.Lerp(0, N, t), 0, N - 1);
int index = (int) Mathf.Lerp(0, N, t - Mathf.Epsilon);
but i dont like the way it looks.
So the question is how to do this gracefully?