我正在尝试使用https://docs.microsoft.com/en-us/xamarin/essentials/orientation-sensor处的该库来计算设备的俯仰,偏航和侧倾。该库可以工作,并以四元数形式返回。
我希望能够将四元数转换为俯仰,偏航和在360度空间中滚动,以及将设备向“ 360”旋转的角度从0到100的百分比。
我一直在研究这个问题,并且发现了各种数学方程式,以数学符号表示,它们如何实现这样的目标。这些文档还讨论了诸如欧拉角,弧度和我没有任何概念的其他各种概念。
C#中是否有一种方法可以将四元数转换为a)360度空间中的角度,以及b)设备在特定轴上的旋转方式的0-100%?
谢谢!
答案 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;
通过以下方式获取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
。您可以认为它在Z轴上旋转了90度。