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

Lew*_*nci 1 c# quaternions xamarin xamarin.forms

我正在尝试使用https://docs.microsoft.com/en-us/xamarin/essentials/orientation-sensor上的这个库来计算设备的俯仰、偏航和滚转。图书馆工作,并以四元数返回。

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

我一直在研究这个,并发现了各种数学方程,用数学符号表示,如何实现这样的事情。这些文件还讨论了欧拉角、弧度和其他各种我没有任何概念的概念。

C# 中有没有办法将四元数转换为 a) 360 度空间中的角度,以及 b) 设备在某个轴上旋转的 0-100 百分比?

谢谢!

Bil*_*SFT 5

根据文件

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

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

首先,?W

var ? = Math.Acos(W)*2;
Run Code Online (Sandbox Code Playgroud)

然后,得到axayaz通过:

var ax = X / Math.Sin(Math.Acos(?));
var ay = Y / Math.Sin(Math.Acos(?));
var az = Z / Math.Sin(Math.Acos(?));
Run Code Online (Sandbox Code Playgroud)

四元数的轴角是 [ax, ay, az]。

例如,a Quaternionof[0,0,0.7071068,0.7071068]将有一个Axis-Angleof [0,0,1]。您可以认为它在 Z 轴上旋转了 90 度。

  • **这个答案是错误的**。执行的计算无效,必须是“Math.Sin(θ/2)” (3认同)
  • 实现这个我得到NaN的X,Y和Z和只有小值的θ (2认同)