Как описать неравномерное движение по кругу в виде функции?

Я пытался описать движение по кругу (на самом деле эллипсу, но это не важно) с помощью функции.
Равномерное движения по кругу успешно реализовал с помощью функций y = sin(t) и x = cos(t).

А вот с неравномерным движением не получается. Я собрал функцию c = f(t) значение которой на разных участках увеличивается и уменьшается. Затем добавил c в функции равномерного движения по кругу y = sin(c*t) и x = cos(c*t). Однако результат не соответствовал ожиданию, скорость движения увеличивалась и уменьшалась не плавно а рывками, движение делало развороты, а его скорость не коррелировала со значением c.

Пример графика функции можно посмотреть здесь https://www.desmos.com/calculator/jejyw9nzwi

Есть ли какой либо способ описать неравномерное движение по кругу в виде функции?
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Нужно взять интеграл от функции c: C(t) = ∫c(t)dt,
и тогда x = cos(Ct), y = sin(Ct).

Если же функция настолько страшна, что интеграла не взять — тогда придётся решить дифур C'(t) = c(t,x,y).
Пускай даже самым простым способом C(t+h) := C(t) + hc(t,x,y). Есть и более сложные способы, гуглите «методы Рунге-Кутты».
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
LaRN
@LaRN
Senior Developer
Посмотрите раздел Динамика.
Чтобы вывести уравнения движения, нужно составить и решить диф. ур.
И раз вам нужно чтобы движение было ускоренным то в уравнении д.б. учтены силы,
Которые придают ускорение.
Под уравнением я имею ввиду вот это
scask.ru/b_book_tm1.php?id=50

Вот по этой ссылке есть уравнение зависимости угла от времени при ускоренном движении по круговой траектории, можно попробовать подставить их в ваши уравнения вместо угла. И параметром тут будет уже не угол, а время. И чем мельче интервал времени тем плавнее будут ложиться точки на траекторию.
scask.ru/b_book_tm1.php?id=50
Ответ написан
Комментировать
TheRonCronix
@TheRonCronix
Как насчет того, чтобы t ограничить в границах 2pi, и это значение умножать на c ?

...
t += delta_angle * с(t);
angle = mod(t, 2*pi);
...
cos(angle)
sin(angle)
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы