Есть активный кокпит с возможностью вращать по тангажу и крену.
Его контроллер принимает значение вращения в условных единицах, по сути в градусах.
Есть игра (X-Plane 11), из которой нужно достать информацию для соответствующего вращения симулятора.
Проблема в том, что при использовании напрямую значений тангажа и крена, всё ломается когда самолёт делает “Мёртвую” Петлю. Во время полуоборота тангаж принимает значения 0 -> ~90 -> 0 градусов, а крен в верхней точке более-менее плавно увеличивается на ~180 градусов. Причиной тому, очевидно, является то, что тангаж принимает значения от -90 до 90 градусов. Вот пример как крен (Z) ломается при изменении тангажа (X):
Нигде в датарефах игры нужные мне значения найдены не были, поэтому было решено идти через математику.
Из игры можно получить кватернион вращения самолёта. Если конвертировать его в градусы по формулам из интернета, получаются те же значения, что игра передаёт как тангаж и крен. Пришла в голову идея конвертировать сперва в вектора направления (forward, left, up), а затем использовать их для конвертации в градусы. С горем да пополам придумал как получать из векторов крен, основываясь каждый раз на информации из предыдущего “кадра”, однако моя идея крайне медленная как для того что должно считаться десятки раз в секунду.
Как конвертировать тангаж я и вовсе не сообразил.
Поэтому вопрос к вам, уважаемые знатоки Хабра, как можно конвертировать в градусы кватернион вращения самолёта так, чтобы всё происходило ожидаемо при любых фигурах пилотажа (например, вираж, бочка, “Мёртвая” Петля, полупетля).
Или, если возможно, как получать нужные значения сразу из игры?