У вас есть несколько вариантов, я опишу теорию, а затем одну возможную реализацию.
Теория
Вы хотите arclength параметризовать вашу кривую.Это означает, что увеличение параметра на 1 приводит к расстоянию перемещения по кривой 1.
Эта параметризация позволит вам полностью контролировать движение вашего объекта на любой скорости, которую вы хотите, будь то постоянная't linear, нелинейный, кусочно ...
Возможное применение
Существует много методов численного интегрирования, которые позволят вам параметризовать кривую по длине.
Возможноэто предварительно вычислить значения и поместить их в таблицу.Выберите небольшой эпсилон и, начиная с первого значения параметра x_0, оцените функцию как x_0, x_0 + epsilon, x_0 + 2 * epsilon ...
. При этом возьмите линейное расстояние между каждым образцом и добавьте его.к аккумулятору.т.е. travelled_distance + = length (sample [x], sample [x + 1]).
Сохраните пару в таблице.
Теперь, когда вы находитесь в точке x и хотите переместить единицы y, вы можете округлить x до ближайшего значения x_n и линейно найти первое значение x_n, расстояние которого больше y, а затем вернуть это значение x_n.
Этот алгоритм не самый эффективный, но его легко понять и кодировать, поэтому, по крайней мере, он поможет вам начать работу.
Если вам нужна более оптимизированная версия, поищите алгоритмы параметризации длины дуги.