Как я могу преобразовать кватернион в угол? - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь использовать эту библиотеку на https://docs.microsoft.com/en-us/xamarin/essentials/orientation-sensor, чтобы определить высоту устройства, рыскание и крен.Библиотека работает и возвращается в кватернионе.

Я хочу иметь возможность конвертировать этот кватернион в шаг, рыскание и крен в пространстве 360 градусов, а также процент от 0 до 100 от того, как далекоустройство было повернуто «к 360».

Я исследовал это и нашел различные математические уравнения, выраженные в математической записи, о том, как достичь чего-то подобного.В этих документах также говорится о таких вещах, как углы Эйлера, Радс и другие различные понятия, о которых я понятия не имею.

Есть ли способ в C # преобразовать из кватерниона в оба а) угол в360 градусов пространства и б) 0-100 процентов того, как повернуто устройство на определенной оси?

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Согласно документу :

Значение кватерниона очень тесно связано с вращением вокруг оси.Если ось вращения является нормализованным вектором (ax, ay, az), а угол поворота равен Θ, то (X, Y, Z, W) составляющие кватерниона составляют:

(ax ·sin (Θ / 2), ay · sin (Θ / 2), az · sin (Θ / 2), cos (Θ / 2))

Сначала вы можете получить Θ формуW:

var Θ = Math.Acos(W)*2;

И получить ax, ay, az по:

var ax = X / Math.Sin(Math.Acos(W));
var ay = Y / Math.Sin(Math.Acos(W));
var az = Z / Math.Sin(Math.Acos(W));

Например, Quaternion равно [0,0,0.7071068,0.7071068].Вы получите Axis-Angle [0,0,1] и градусов 90.Вы можете считать, что он повернут на 90 градусов по оси Z.

...