如何将四元数转换为角度?

时间:2018-10-01 04:50:28

标签: c# xamarin xamarin.forms quaternions

我正在尝试使用https://docs.microsoft.com/en-us/xamarin/essentials/orientation-sensor处的该库来计算设备的俯仰,偏航和侧倾。该库可以工作,并以四元数形式返回。

我希望能够将四元数转换为俯仰,偏航和在360度空间中滚动,以及将设备向“ 360”旋转的角度从0到100的百分比。

我一直在研究这个问题,并且发现了各种数学方程式,以数学符号表示,它们如何实现这样的目标。这些文档还讨论了诸如欧拉角,弧度和我没有任何概念的其他各种概念。

C#中是否有一种方法可以将四元数转换为a)360度空间中的角度,以及b)设备在特定轴上的旋转方式的0-100%?

谢谢!

1 个答案:

答案 0 :(得分:0)

根据document

  

四元数的值与绕轴的旋转非常相关。   如果旋转轴是归一化向量(ax,ay,az),则   旋转角为Θ,则该旋转角的(X,Y,Z,W)分量   四元数是:

     

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

首先,您可以从Θ的表格中获得W

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

通过以下方式获取axayaz

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。您可以认为它在Z轴上旋转了90度。