0

给定一个对象四元数 q,以及形成 3D 空间的基向量 vx、vy、vz,如何检查四元数是平行还是垂直于所有基向量?

例如,我有基向量:

vx = (0.447410, 0, -0.894329)
vy = (0, 1, 0)
vz = (0.894329, 0, 0.447410)

和四元数

q(w,x,y,z) = (-0.973224, 0, -0.229860, 0)

我知道四元数与所有基向量垂直或平行(或反平行),但我如何实际计算它?

另一个例子,

q(w,x,y,z) = (0.823991, 0, 0.566602, 0)

这与所有基向量都不是垂直或平行(或反平行)。

4

2 回答 2

1

我通过将四元数转换为矩阵来解决这个问题。从矩阵中取出基向量,计算矩阵基向量与原始基向量的点积。如果它们都是 0 或 1,则四元数平行或垂直于原始基向量。

于 2010-08-20T11:31:14.903 回答
1

关于术语的注释:严格来说,“四元数垂直于基向量之一”的确切含义尚不清楚......四元数和 3-D 向量不能以这种方式进行比较。但是,四元数可以被认为是旋转轴(3-D 向量)和标量旋转角度的表示,所以我假设您想知道旋转轴是否垂直于基向量之一。

对于被视为 3-D 旋转的单位四元数,惯例是对于 q=(w,x,y,z),x、y 和 z 沿旋转轴形成一个 3-D 向量(我们称之为 qv), w=cos(alpha/2) 表示旋转角度 alpha。

在您的情况下,qv = (x,y,z) = (0, -0.229860, 0)。vx、vy 和 vz 都是单位向量,因此如果将 qv 归一化为单位向量,则更容易看出发生了什么。除以它的长度 (0.229860) 得到 qv_unit = (0, -1, 0)。要找到 qv_unit 与 vx、vy 和 vz 之间的角度,请使用点积:

对于单位向量 v1=(a, b, c) 和 v2=(d, e, f):

cos(theta) = v1 点 v2 = ad + be + cf

qv_unit dot vx = 0*.447410 + -1*0 + 0*-894329 = 0 = cos(theta),所以theta=pi/2,我们看到qv_unit垂直于vx。

qv_unit dot vy = 0*0 + -1*1 + 0*0 = -1 = cos(theta),所以 theta=pi,qv_unit 与 vy 反平行。

qv_unit dot vz = 0*.894329 + -1*0 + 0*.447410 = 0 = cos(theta),所以theta=pi/2,qv_unit也垂直于vz。

于 2010-08-20T06:28:12.137 回答