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

3
我正在尝试使用https://learn.microsoft.com/en-us/xamarin/essentials/orientation-sensor中的此库来计算设备的俯仰、偏航和翻滚。该库可以返回四元数,但我想将其转换为360度空间中的俯仰、偏航和翻滚角度,以及设备朝向360度旋转的0到100百分比。我已经查阅了各种数学公式来实现这个目标,但这些文档还涉及欧拉角、弧度和其他一些概念,而我对这些概念没有任何概念。在C#中是否有一种方法可以将四元数转换成a)360度空间中的角度和b)某个轴上设备旋转的0-100百分比?谢谢!

你已经尝试过什么来解决它了吗? - Cheesebaron
http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/ - Jason
@Cheesebaron 我尝试理解四元数,它们是什么以及如何在C#中将它们转换为角度。但我一直无法理解 - 因此提出了这个问题。准确地说,我不明白如何有意义地将四元数转换为由俯仰、偏航和翻滚元素组成的三维空间中的角度。 - Lewis Cianci
1个回答

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;

然后,通过以下方式获取axayaz
var ax = X / Math.Sin(Math.Acos(Θ));
var ay = Y / Math.Sin(Math.Acos(Θ));
var az = Z / Math.Sin(Math.Acos(Θ));

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

例如,一个Quaternion的值为[0,0,0.7071068,0.7071068]将具有Axis-Angle [0,0,1]。可以认为它在Z轴上旋转了90度。


2
实现这个程序后,我得到了X、Y和Z的NaN值,以及Θ的小值。 - apc
3
这个答案是错误的。所执行的计算无效,必须是 Math.Sin(Θ/2) - Cranio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接