Я пытаюсь написать метод, который интерполирует от 0 до x (положение объекта в одном измерении) с течением времени, используя ускорение в начале и замедление в конце (облегчить/облегчить) с единственными ограничениями, которые общее время, а также продолжительность ускорения и замедления. движение должно повторить эффект инерции, и я рассматриваю кривую Эрмита для нелинейных частей.
double Interpolate(
double timeToAccel, double timeCruising, double timeToDecel,
double finalPosition,
double currentTime)
{
//...
}
Может кто-то указать мне на часть кода, которая это делает? Я не знаю, как интегрировать кривую Эрмита, поэтому не знаю, сколько я буду двигаться в ускоряющей части или в замедляющей части, и в свою очередь я не могу понять, какая будет скорость в линейной часть.
Спасибо.
Некоторая ссылка, чтобы проиллюстрировать мой вопрос.
Edit:
- начальная и конечная скорости равны нулю, а текущее время также является частью параметров в методе, я обновил подпись.
- В принципе идея состоит в том, чтобы представить движение с постоянной скоростью на расстоянии d, что дает общую продолжительность. Затем мы добавляем фазы ускорения и замедления, сохраняя при этом одну и ту же продолжительность, поэтому у нас есть неизвестная новая скорость круиза для определения (потому что мы меньше двигаемся в фазах Эрмита, чем в линейных фазах, которые они заменили). Возможно, количество перемещений, потерянных в фазах Эрмита, по сравнению с линейным движением одной и той же продолжительности - это соотношение между верхней и нижней областью кривых, просто идея от эксперта.
Изменить: Roman и Bob10 предоставили полные рабочие решения. Я реализовал код от Романа. Спасибо вам, ребята! Я ценю вашу прекрасную поддержку и ваши подробные решения, вы сохранили мне долгие поиски и испытания.