Углы связанной системы координат

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Deutsch (de)Русский (ru)中文 (zh)Translate (Translate)

QAngle 'это C++ класс в Source представляющий трёхмерные углы вращения в неподвижной системе координат в соотствестии с правилом правой руки от основной оси Z. Каждый QAngle содержит три значения векторного вращения:

Оси

X

X тангаж +вниз/-вверх (наклон)

Y

Y рысканье +влево/-вправо (поворот)

Z

Z крен +направо/-налево (отклонение)

(-45,10,0) означает 45° вверх, 10° влево и 0° крена.

Tip.pngСовет:Оси иногда называют rX, rY и rZ, чтобы отличать их от вектора(en) в декартовых осях.
Note.pngПримечание:Z ограничена значениями +50/-50 для угла обзора игрока.

Объявление

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 заимствована из аэрокосмической техники.

Авиация

Если представить самолет, то при тангаже носовая часть движется вверх и вниз, при рыскание - влево и вправо, а при крене одно крыло поднимается, а другое опускается.

Wikipedia icon В авиации, такая система называется углами Эйлера, в то время как QAngles - углы относительного вращения. Смотрите "Математика" для понимания различия.

Математика

Строго говоря, QAngles можно было бы определить как внешние вращения Тейта-Брайана, в соответствии с правилом правой руки. Однако термины "углы Тейта-Брайана" и "углы Эйлера" иногда используются как взаимозаменяемые. Рассмотрим эти термины в более понятных составляющих:
  • Отличие внутренних и врешних вращений, заключается в том, что в первом случае каждое вращение смещает оси вместе с ним
  • Отличие действительных углов Эйлера и углов Тайта-Брайана, заключается в том, что в первом случае вращение отсчитывается дважды вокруг одной оси и один раз вокруг другой (попеременно), в то время как во втором случае вращение отсчитывается один раз вокруг всех трех осей
  • Правило правой руки гласит, что если большой палец правой руки человека направлен вдоль положительного направления оси, то остальные пальцы будут сгибаться в положительном направлении вращения
Tip.pngСовет:Поскольку разнородные определения используются одновременно, однозначная формулировка наиименования позволяет избежать путаницы

Преобразование из Вектора

Так как для углов не определён специальный ключ-параметр описания данных(en), созданные в Hammer данные будут считываться как вектор(en). Его ординаты будут представлять градусы поворота, а не координаты, поэтому их необходимо конвертировать перед использованием:

QAngle angMyAngle = QAngle(vecFromHammer.x, vecFromHammer.y, vecFromHammer.z);

// Conversion back to a vector, if required
AngleVectors(angMyAngle, &vecFromHammer);

Реализация

Смотрите также