Я пишу симуляцию, в которой объект движется в 2D-мире к целевой позиции, сохраненной как вектор target(x,y)
. Положение объекта также сохраняется как вектор положения pos(x,y)
. Объект содержит еще два вектора, желаемую скорость движения dv(x,y)
, а также текущую скорость движения cv(x,y)
. В начале симуляции оба этих вектора скорости являются начальными, т.е. установлены на (0,0)
.
Когда объект должен двигаться к целевой позиции, я вычисляю желаемый вектор скорости dv
, нормализую его и масштабирую по значению скорости движения:
dv.set(target).sub(pos).normalize()
dv.scale(speed)
Я хочу, чтобы движение выглядело более реалистично, поэтому я использую два вектора скорости. dv
сообщает полную скорость, с которой я хочу переместить объект, а cv
содержит реальную скорость, с которой объект движется в данный момент.
Затем в каждом кадре (этап обновления) текущая скорость cv
устанавливается на основе желаемой скорости dv
и значения ускорения acc
. Это делается путем простого вычисления разницы между cv
и dv
и фиксации этой разницы до acc
. Таким образом, объект начинает двигаться медленно и постепенно ускоряется, чтобы в конечном итоге достичь полной скорости.
Пока это работает нормально. Теперь я хочу использовать acc
и для замедления. Когда расстояние между pos
и target
достигает определенного значения, желаемая скорость dv
должна быть установлена на (0,0)
, чтобы объект постепенно замедлялся до полной остановки в заданном положении.
Мой вопрос: как я могу рассчитать, на каком расстоянии мне нужно установить dv
на (0,0)
(т.е. сказать системе остановить движение), чтобы объект правильно замедлился, чтобы остановиться точно в целевом положении?