Это простая проблема кинематики.
В некоторый момент времени t (v) объекта с постоянным ускорением описывается следующим образом:
v = v0 + at
Где v0 - начальное значениескорость и ускорение.В вашем случае конечная скорость равна нулю (объект остановлен), поэтому мы можем решить для t:
t = -v0/a
Чтобы найти общую пройденную разницу, мы берем интеграл от скорости (первое уравнение)через некоторое время.Я не делал интегралы в течение многих лет, но я почти уверен, что это сработает:
d = v0t + 1/2 * at^2
Мы можем заменить в уравнении t, которое мы разработали, более простым:
d = v0^2/a + 1/2 * v0^2 / a
И решение для v0:
v0 = sqrt(-2ad)
Или, в более широком формате языка программирования:
initialVelocity = sqrt( -2 * acceleration * distance );
Ускорение в этом случае отрицательное (объект замедляется)и я предполагаю, что это константа, в противном случае это усложняется.
Если вы хотите использовать это внутри цикла с конечным числом шагов, вам нужно быть немного осторожнее.Каждая итерация цикла представляет период времени.Объект будет двигаться на величину, равную средней скорости, умноженной на отрезок времени.Пример цикла с продолжительностью итерации, равной 1, будет выглядеть примерно так:
position = 0;
currentVelocity = initialVelocity;
while( currentVelocity > 0 )
{
averageVelocity = currentVelocity + (acceleration / 2);
position = position + averageVelocity;
currentVelocity += acceleration;
}