计算四元数逆

Posted

技术标签:

【中文标题】计算四元数逆【英文标题】:Calculate Quaternion Inverse [closed] 【发布时间】:2011-10-05 02:54:00 【问题描述】:

嗨,我想弄清楚如何计算四元数的逆。一个代码示例会很棒。

干杯

【问题讨论】:

@TabbyCool 他将如何“尝试”任何事情?您是否希望他真的得到一支笔和一个记事本,并重新发现人类花了数百年才弄清楚的数学作品? 【参考方案1】:

请参阅Wikipedia article 了解整个四元数数学。

不知道你想使用什么语言,但我会尝试在 Haskell 中给出一些提示。

data Quaternion = Q Double Double Double Double deriving (Show, Eq)

首先,你需要实现四元数的乘法和加法。

instance Num Quaternion where
 (+) = q_plus
 (*) = q_mult
 --....

q_plus (Q a b c d) (Q a' b' c' d') = Q (a + a') (b + b') (c + c') (d + d')
q_mult (Q a b c d) (Q a' b' c' d') = Q a'' b'' c'' d''
  where
    a'' = a * a' - b * b' - c * c' - d * d'
    b'' = a * b' + b * a' + c * d' - d * c'
    c'' = a * c' - b * d' + c * a' + d * b'
    d'' = a * d' + b * c' - c * b' + d * a'

与标量的乘法应该通过转换来完成:

scalar_to_q a = Q a 0 0 0

定义

i = Q 0 1 0 0
j = Q 0 0 1 0
k = Q 0 0 0 1

然后实现共轭和模数:

q_conjugate q = (scalar_to_q (negate .5)) * (q + i * q * i + j * q * j + k * q * k)
q_modulus q = sqrt $ q * (q_conjugate q)

现在,反过来:

q_inverse q = (q_conjugate q) * (scalar_to_q (m * m))
  where
    m = q_modulus q

希望有用。

PS:如果成功完成,上面的实例定义将简化一些事情。我让你填补空白。

【讨论】:

为什么关闭这个问题,这是一个合理的问题,询问如何计算四元数的逆。 *** 是不是过度节制了?【参考方案2】:

查看Matrix and Quaternion FAQ。还有一些代码示例。

【讨论】:

以上是关于计算四元数逆的主要内容,如果未能解决你的问题,请参考以下文章

四元数法

使用四元数计算 iphone 的偏航、俯仰和滚动?

欧拉角与四元数(计算,编程)

BetaFlight深入传感设计之六:四元数计算方法

matlab练习程序(求向量间的旋转矩阵与四元数)

四元数在多层游戏对象姿态计算中的应用