Я ищу способ плавного увеличения или уменьшения скорости кругового движения.
Используя параметрическое уравнение круга, я могу перемещать объект по кругу во времени:
x = center_x + radius * sin(time * speed)
y = center_y + radius * cos(time * speed)
Проблема с этим подходом заключается в том, что я не могу просто сделать speed = speed + 1
, чтобы ускорить объект, потому что это приводит к резким движениям. Это имеет смысл, поскольку значения x и y пересчитываются каждый кадр на основе абсолютных значений, а не относительно предыдущей позиции объекта.
Другой подход может состоять в том, чтобы использовать вектор, который представляет скорость объекта, а затем вместо него применить круговое движение:
v_x = radius * sin(time * speed)
v_y = radius * cos(time * speed)
x = x + v_x
y = y + v_y
Проблема этого подхода заключается в том, что если я изменю скорость, радиус будет увеличиваться или уменьшаться. Это имеет смысл, потому что движение относительно текущей позиции, и поэтому время, по существу, пропускается, если я изменяю скорость.
Одна реализация, о которой я могу подумать, может сработать, это использовать вектор, который указывает от объекта к центру круга. Затем я мог вычислить касательную окружности в положении объекта, используя перпендикулярный вектор, нормализовать его и масштабировать по скорости. Я еще не реализовал это, потому что это кажется излишним для такой проблемы, поэтому, пожалуйста, дайте мне знать, если существует более простое решение. Спасибо!