У меня есть изображение (допустим, это простой прямоугольник), расположенный слева от моего экрана, и я могу перемещаться вверх и вниз. При перемещении вверх я использую простую тригонометрию, чтобы повернуть ее так, чтобы прямоугольник «указывал» в верхний правый угол экрана. При перемещении вниз он указывает на левый нижний угол экрана.Вмешательство в поворот
Учитывая, что мое приложение использует следующую систему координат:
Я использую следующий код для достижения вращения:
// moving upwards
rotation = -atan2(position.y , res.x - position.x));
// moving downwards
rotation = atan2(res.y - position.y , res.x - position.x));
где res
является точкой отсчета и position
является положение (верхним левый угол) нашего изображения прямоугольника. (Информация о atan2()
: atan2() on cplusplus.com).
Это работает просто отлично: она вращается больше, когда дальше от опорной точки (Рез). Однако, скажем, изображение находится в самом низу экрана. Если мы переместим его вверх, он очень резко повернется. Я хотел бы "inbetween" этот поворот, чтобы он был сглажен.
То, что я имею в виду, вдруг вращающееся это: Допустим, прямоугольник не перемещается в кадре п: поэтому его вращение 0 градусов. Затем я нажимаю стрелку вверх, которая позволяет рассчитать угол. В кадре n + 1 угол составляет 30 градусов (например). Это, конечно, не очень гладко.
Является ли мой вопрос понятным? Как мне это сделать?
Работает отлично! Благодаря! – RaptorDotCpp
Следует отметить, что время дельта должно быть включено, чтобы сделать независимую скорость вращения – Paranaix
@Paranaix Да, и тогда мы использовали бы параметрическую форму для этого уравнения, которая должна быть экспоненциальным распадом. В зависимости от того, насколько важна анимация и стоит ли это дополнительное усилие. – Zong