Фигуры Лиссажу для анимации оружия

Оружие в шутерах от первого лица не должно быть прибито к камере гвоздями – оно раскачивается в такт ходьбе, да и при стоянии на месте медленно ходит туда-сюда из-за постоянного движения рук. Конечно, довольно трудно сымитировать этот эффект в полном соответствии с реальностью, но можно обойтись дешевым и убедительным фейком. Оружие можно двигать вдоль кривой Лиссажу: x = sin(t), y = cos(2t). В результате получается траектория, изображенная на рисунке справа.

Vector2f lissajousCurve(float t)
{
return Vector2f(sin(t), cos(2 * t));
}

//...

if (playerWalking)
t += 10.0f * delta;
else
t += 1.0f * delta;

if (t > 2 * PI)
t = 0.0f;

Vector2f p = lissajousCurve(t) / 10.0f;
weapon.localPos = Vector3f(p.x, p.y, 0.0f);