对象四元数平行或垂直于所有基矢量

时间:2010-08-20 05:18:53

标签: math computational-geometry quaternions

给定对象四元数q和基础向量vx,vy,vz形成3D空间,如何检查四元数是否与所有基向量平行或垂直?

例如,我有基础向量:

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)

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

2 个答案:

答案 0 :(得分:1)

关于术语的说明:严格地说,“四元数与基础向量之一垂直”并不清楚你的意思是什么......四元数和三维向量在这种方式上是不可比较的。但是,四元数可以被认为是旋转轴(三维矢量)和标量旋转角度的表示,所以我假设你想知道是否 旋转轴垂直于基矢量之一。

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

在您的情况下,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 dot v2 = ad + be + cf

qv_unit dot vx = 0 * .447410 + -1 * 0 + 0 * -89​​4329 = 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。

答案 1 :(得分:1)

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