Перевод кватерниона в углы Эйлера
Вставьте четыре компоненты кватерниона поворота и получите крен, тангаж и рыскание или смените направление, чтобы из трёх углов Эйлера получить кватернион. Используется распространённый порядок Z-Y-X (рыскание, тангаж, крен) — как в авиации, робототехнике и многих игровых движках.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Выберите Кватернион → углы или Углы → кватернион.
- Введите w, x, y и z или крен, тангаж и рыскание в градусах.
- Смотрите результат; для кватерниона показывается и длина введённых чисел.
Формулы
Из единичного кватерниона (w, x, y, z):
- крен = atan2(2(wx + yz), 1 − 2(x² + y²))
- тангаж = asin(2(wy − zx)), не больше ±90°
- рыскание = atan2(2(wz + xy), 1 − 2(y² + z²))
Обратно из углов, где c и s — косинус и синус половины каждого угла:
- w = c_r c_p c_y + s_r s_p s_y, x = s_r c_p c_y − c_r s_p s_y
- y = c_r s_p c_y + s_r c_p s_y, z = c_r c_p s_y − s_r s_p c_y
Пример
Кватернион (0,9238795; 0; 0; 0,3826834) — это cos 22,5° и sin 22,5° вокруг Z. Рыскание = atan2(2 × 0,92388 × 0,38268; 1 − 2 × 0,38268²) = atan2(0,70711; 0,70711) = 45°, крен и тангаж — 0°: поворот на 45° влево вокруг вертикальной оси.
Обратно: один тангаж 90° даёт w = cos 45° = 0,707107 и y = sin 45° = 0,707107, а x и z равны 0.
Советы
- q и −q — один и тот же поворот; если библиотека вернула отрицательный w, углы всё равно верны.
- Углы больше 180° сворачиваются: крен и рыскание выдаются в пределах от −180° до 180°.
- Если переводите много поворотов в коде, сначала проверьте здесь одну пару значений.
Частые вопросы
В каком порядке поворотов считаются углы?
Z-Y-X во внутренних осях: сначала рыскание вокруг Z, затем тангаж вокруг новой оси Y, затем крен вокруг новой оси X — это углы Тейта — Брайана, принятые в авиации, ROS и большинстве учебников. Другие порядки (например, Z-X-Y в Unity) дают для того же кватерниона другие углы.
Зачем кватернион нормализуется?
Чистый поворот задают только единичные кватернионы. Округлённые значения вроде 0,7071 немного отклоняются от единицы, поэтому калькулятор сначала делит на длину и показывает её. Длина, далёкая от 1, обычно означает опечатку.
Что происходит при тангаже ±90°?
Это складывание рамок (gimbal lock): крен и рыскание вращают вокруг одной оси, и важна только их разность. Калькулятор ограничивает тангаж ±90° и выдаёт одну подходящую пару крена и рыскания — она может отличаться от исходной, но ориентация та же.
В каком порядке записаны компоненты?
Здесь скалярная часть w идёт первой: (w, x, y, z). Некоторые библиотеки, например Unity и three.js, хранят (x, y, z, w). Проверьте источник и введите скаляр в поле w.