Учитывая набор углов Эйлера (Pitch, Yaw, Roll), как найти альтернативный набор, который описывает ту же трехмерную ориентацию?

У меня есть хороший кватернион для уравнения Эйлера, который иногда возвращает неинтуитивный набор углов.

Например:

  • Шаг: 129
  • Рыскание: -85
  • Рулон: 126

Я хотел бы программно найти чередующиеся вращения, такие как Pitch и Roll от -90 до 90. Рыскание может быть от 0 до 360.

[РЕДАКТИРОВАТЬ] Шаг ограничен от -90 до +90, а крен ограничен от -180 до +180.


person JeffV    schedule 10.05.2016    source источник


Ответы (1)


По сути, вы хотите, чтобы ориентация не выходила за пределы полюса. Сделать это очень просто:

Сначала проверьте, не выходит ли шаг за полюс (т.е. больше 90 ° или меньше -90 °). В этом случае сделайте следующее:

add 180° to yaw
add 180° to roll
set new pitch to 180° - old pitch (or -180° - old pitch in the case of south pole)

Это практически все. Вы также можете адаптировать новые углы следующим образом:

while(yaw < 0)
    yaw += 360
while(yaw > 360)
    yaw -= 360
while(roll < -180)
    roll += 360
while(roll > 180)
    roll -= 360
person Nico Schertler    schedule 10.05.2016
comment
Спасибо @ nico-schertler! - person JeffV; 11.05.2016