Иногда бывает необходимо выполнить линейную интерполяцию между углами. Ситуация осложняется тем, что углы в градусах бывают равны при совершенно разных значениях (например угол -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); } |