Я ищу способ плавного увеличения или уменьшения скорости кругового движения.Изменение скорости кругового движения
Используя параметрическое уравнение окружности, можно перемещать объект по кругу со временем:
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
Проблема такого подхода заключается в том, что если я изменить скорость, то радиус будет расти или уменьшаться. Это имеет смысл, потому что движение относится к текущему положению, и поэтому время существенно пропускается, если я изменяю скорость.
Одна реализация, о которой я могу думать, может работать, используя вектор, который указывает от объекта к центру круга. Затем я мог рассчитать касательную окружности в позиции объекта, используя перпендикулярный вектор, нормализовать его и масштабировать по скорости. Я еще не реализовал это, потому что это похоже на излишнюю проблему для такой проблемы, поэтому, пожалуйста, дайте мне знать, существует ли более простое решение. Благодаря!
У этой проблемы есть такая же проблема, как и моя вторая реализация. Попробуйте сами. – Kai
@Kai: umm, no it should not ... – ephemient
А, моя реализация была неправильной, а не этот алгоритм (способ выглядеть глупо). Благодаря! – Kai