Я считаю, что вы хотите решить вашу проблему в 3 части.
Во-первых, вам нужно найти минимальную скорость, необходимую для преодоления расстояния во времени T.
Это было бы довольно просто (Д / т) = V (мин)
Предполагается мгновенное ускорение от v (начальное) до v (мин) и снова замедление в течение периода времени 0 с в начале и в конце.
так, например, скажем, ваш v (i) равен 5px / s.
Вы хотите движение 100px в течение 10 секунд.
v (мин) = 100px / 10s = 10px / s
Во-вторых, вы хотите плавное ускорение от v (начальный) до v (мин). это займет некоторый период времени t (акк). Предполагая, что ускорение и замедление будут равны, тогда вы можете просто рассчитать для одного из них, а затем умножить на 2.
Мы можем вызвать функцию, которая описывает расстояние, пройденное во время ускорения D (ускорение).
Позвольте нам легко начать и сказать, что мы хотим, чтобы продолжительность ускорения составляла 1 с
так что ваше уравнение для общего пройденного расстояния будет
D (всего) = D (ускорение) + D (v (макс.))
Когда вы знаете, что D (accel) рассчитан на 2 с, вы можете вычислить
D (ускорение) = (V (ini) + V (max)) / 2) * (2 секунды)
и
D (v (max)) = V (max) * 8 с
Решая для V (max) мы получаем
100px = D (ускорение) + D (v (макс.))
100 пикселей = (5 пикселей / с + VMax) / 2 * (2 с)) + VMax * 8 с
100px = 5px + (Vmax * 1с) + Vmax * 8с
95px = 9Vmax * s
VMax = 95px / 9s
VMax = 10,556 пикселей / с
Теперь вы можете вернуться и заменить окно ускорения 1 с формулой, определяющей окно ускорения как% от общего периода времени или что-то другое.
Также обратите внимание, что в целях анимации вам придется разбивать 10,556 пикселей / с на пиксельные движения на кадр и учитывать время соответственно.