Углы связанной системы координат
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);