Углы связанной системы координат
QAngle 'это C++ класс в Source представляющий трёхмерные углы вращения в неподвижной системе координат в соотствестии с правилом правой руки от основной оси Z.
Каждый QAngle содержит три значения векторного вращения:
Оси
Y
Тангаж (наклон) +вниз/-вверх
Z
Рысканье (поворот) +влево/-вправо
X
Крен (отклонение) +направо/-налево
В
id Tech 2, и следовательно в
GoldSrc,
Source и
Source 2, используется Y Z X = Тангаж (Pitch), Рысканье (Yaw), Крен (Roll), следовательно
(-45,10,0) означает 45° вверх, 10° влево и 0° крена направо.
Объявление
C++
QAngle angMyAngle = QAngle(-45,10,0);
- Можно задавать значения X, Y и Z отдельно.
Возможна путаница:The variables refer to the placement in the array, not the axis they rotate around, so eg. Y means Yaw, not Pitch![подтвердить]
- Префикс
ang(или простоa) используется для обозначения переменной угла.
type QAngle = { pitch: число, yaw: число, roll: число };
Направление в пространстве
Чтобы понять, как работает QAngle(Qx, Qy, Qz), представьте вид от первого лица:
- Qx: Взгляд вниз или вверх соответствует положительному или отрицательному значению [Y] соотвественно
- Qy: Взгляд влево или вправо соответствует положительному или отрицательному значению [Z] соотвественно
- Qz: Наклон головы так, чтобы правое или левое ухо было ближе земле, соответствует положительному или отрицательному значению [X] соотвественно
Чтобы соотнести это с векторами и координатами: значения [X], [Y] и [Z] соответствуют вращению по часовой стрелке (в градусах) вокруг осей y, z и x неподвижной системы координат[подтвердить] соотвественно.
Под "вращением по часовой стрелке" вокруг оси подразумевается, что наблюдатель находится в начале координат и смотрит в положительном направлении указанной оси.
Соглашения об именовании
В разных областях деятельности используются разные наименования для описания этих углов. Чтобы прояснить противоречивые термины, ниже приведены краткие пояснения. Похоже, что терминология для платформы Source заимствована из аэрокосмической техники.
Авиация
| Если представить самолет, то при тангаже носовая часть движется вверх и вниз, при рыскание - влево и вправо, а при крене одно крыло поднимается, а другое опускается.
|
Математика
Строго говоря, QAngles можно было бы определить как внешние вращения Тейта-Брайана, в соответствии с правилом правой руки. Однако термины "углы Тейта-Брайана" и "углы Эйлера" иногда используются как взаимозаменяемые. Рассмотрим эти термины в более понятных составляющих:
|
Камеры
When talking about cameras the terms Tilt (up/down), Pan (left/right) and Roll (slant left/right) is used for camera (Gimbal) rotations. This is likely the reason why QAngle uses YZX coordinates.
Преобразование из Вектора
Так как для углов не определён специальный ключ-параметр описания данных, созданные в Hammer данные будут считываться как вектор. Его ординаты будут представлять градусы поворота, а не координаты, поэтому их необходимо конвертировать перед использованием:
QAngle angMyAngle = QAngle(vecFromHammer.x, vecFromHammer.y, vecFromHammer.z);
// Преобразование обратно в вектор, при необходимости
AngleVectors(angMyAngle, &vecFromHammer);