Углы связанной системы координат
QAngle 'это C++ класс в Source представляющий трёхмерные углы вращения в неподвижной системе координат в соотствестии с правилом правой руки от основной оси Z. Каждый QAngle содержит три значения векторного вращения:
Оси
X
X тангаж +вниз/-вверх (наклон)
Y
Y рысканье +влево/-вправо (поворот)
Z
Z крен +направо/-налево (отклонение)
(-45,10,0)
означает 45° вверх, 10° влево и 0° крена.


Объявление
QAngle angMyAngle = QAngle(-45,10,0);
- Можно задавать значения X, Y и Z отдельно.
- Префикс
ang
(или простоa
) определяет переменную как угол.
Ориентация
Чтобы понять, как работает QAngle([X], [Y], [Z])
, представьте вид от первого лица:
- Взгляд вниз или вверх соответствует положительному или отрицательному значению [X] соотвественно
- Взгляд влево или вправо соответствует положительному или отрицательному значению [Y] соотвественно
- Наклон головы так, чтобы правое или левое ухо было ближе земле, соответствует положительному или отрицательному значению [Z] соотвественно
Чтобы соотнести это с векторами и координатами: значения [X], [Y] и [Z] соответствуют вращению по часовой стрелке (в градусах) вокруг осей y, z и x неподвижной системы координат[подтвердить] соотвественно.
Под "вращением по часовой стрелке" вокруг оси подразумевается, что наблюдатель находится в начале координат и смотрит в положительном направлении указанной оси.
Соглашения об именовании
В разных областях деятельности используются разные наименования для описания этих углов. Чтобы прояснить противоречивые термины, ниже приведены краткие пояснения. Похоже, что терминология для платформы Source заимствована из аэрокосмической техники.
Авиация
Если представить самолет, то при тангаже носовая часть движется вверх и вниз, при рыскание - влево и вправо, а при крене одно крыло поднимается, а другое опускается.
|
Математика
Строго говоря, QAngles можно было бы определить как внешние вращения Тейта-Брайана, в соответствии с правилом правой руки. Однако термины "углы Тейта-Брайана" и "углы Эйлера" иногда используются как взаимозаменяемые. Рассмотрим эти термины в более понятных составляющих:
![]() |
Преобразование из Вектора
As there is no specific datadesc keyfield for angles, one chosen in Hammer will arrive as a vector. Its ordinates will represent degrees of rotation and not coordinates so it must be fixed up before use:
QAngle angMyAngle = QAngle(vecFromHammer.x, vecFromHammer.y, vecFromHammer.z);
// Conversion back to a vector, if required
AngleVectors(angMyAngle, &vecFromHammer);