Когда я хочу переместить объект вокруг точки, я делаю:
point.x *= cosf(timer.timeElapsed);
point.y *= sinf(timer.timeElapsed);
Как заставить точку двигаться на восьмой или бесконечной траектории?
mathematics
movement
trajectory
Евгений
источник
источник
Как отмечает Мартон, есть несколько кривых «восьмерка», которые могут соответствовать вашим потребностям. Возможно, самым простым является лемнискат Героно , который имеет параметризацию:
и выглядит так:
Однако лемнискат Бернулли может быть визуально более приятным; он имеет параметризацию, очень похожую на лемнискату Героно, за исключением того, что обе оси масштабируются с коэффициентом
1/(sin(t)^2 + 1) = 2/(3 - cos(2*t))
:Это выглядит так:
(Анимации, сделанные с помощью Maple 13, сжатые с помощью GIFsicle.)
источник
Я случайно нашел другой, используя эту формулу:
По графику Вольфрама Альфа :
источник
t
. Я бы рекомендовал включить описание того, как вы будете использовать эту формулу для позиционирования движущегося объекта во времени.Произведение расстояний от любой точки на этой кривой до (-1, 0) и (1,0) является постоянным и равно 1.
источник