使用四元数绕轴旋转多个点

3
我想使用四元数简单地围绕 X、Y、Z 轴旋转多个点(一个形状)。我将我的欧拉角转换为四元数,因此四元数已经设置好并且看起来不错。
我的设置如下:
- q(四元数)-> W:0.99,X:0.07,Y:0,Z:0。 (这是围绕 X 轴旋转约 17.18°) - p(点)-> X:-0.35,Y:1.4,Z:0.35。 - p'(旋转点)-> ?
我对四元数很陌生,不知道我想要使用的操作中每个字母代表什么值。
1个回答

3

对于旋转,您需要使用一个单位四元数,即W^2 + X^2 + Y^2 + Z^2 = 1

四元数中的(X, Y, Z)部分可以视为沿旋转轴的向量。这个向量分量的大小以一种不太明显的方式编码了旋转角度。

|X,Y,Z| = sqrt(X^2 + Y^2 + Z^2) = sin(rotation_angle/2)

为了完成四元数,我们有一个实部分W。
W = cos(rotation_angle/2)

使用四元数进行旋转的优点在于它具有简单的乘法规则,并避免了万向锁问题(不像欧拉角),同时只有1个多余的自由度(不像旋转矩阵,它们有6个多余的自由度)。
可以直接使用四元数来旋转点,首先将点转换为“纯虚四元数”:P = (W=0, X=p.x, Y=p.y, Z=p.z)(注意该四元数的向量分量与点的坐标相同)。然后,通过四元数乘法计算旋转后的点,如下所示:
either:  P' = Q* P Q
or:      P' = Q P Q*
(depending on convention)

这里的 Q* 是四元数 Q 的共轭。结果的实部将是零:P'.W = 0,而向量部分 (P'.X, P'.Y, P'.Z) 将是旋转后的点坐标。

然而,通常将旋转四元数用于图形目的的方法是将它们转换为等效的旋转矩阵。您可以通过上面的公式和四元数乘法规则计算出细节,但得到的3x3旋转矩阵类似于:

[  W^2+X^2-Y^2-Z^2   2(XY-WZ)          2(ZX+WY)         ]
[  2(XY+WZ)          W^2+Y^2-X^2-Z^2   2(YZ-WX)         ]
[  2(ZX-WY)          2(YZ+WX)          W^2+Z^2-X^2-Y^2  ]

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