Иногда бывает необходимо выполнить линейную интерполяцию между углами. Ситуация осложняется тем, что углы в градусах бывают равны при совершенно разных значениях (например угол -360, 360 и 0 на самом деле одно и тоже). Делюсь методом правильной интерполяции между углами (подсмотрено в исходниках Quake).
float lerpAngle(float a1, float a2, float t)
{
if (a1 - a2 > 180)
{
a1 -= 360;
}
if (a1 - a2 < -180)
{
a1 += 360;
}
return a1 + t * (a2 - a1);
}
Если вам необходимо вычислить расстояние в градусах между углами, то можно переписать код так:
float distAngle(float a1, float a2)
{
if (a1 - a2 > 180)
{
a1 -= 360;
}
if (a1 - a2 < -180)
{
a1 += 360;
}
return abs(a2 - a1);
}