计算四元数的逆

10

嗨,我正在尝试弄清如何计算四元数的逆。一个代码示例会非常棒。

谢谢


3
他会如何“尝试”呢?你指望他真的去拿笔记本重新发现一个耗费人类数百年时间才能找到的数学作品吗? - MaiaVictor
2个回答

10

请查看维基百科文章以获取完整的四元数数学知识。

不知道你想使用什么语言,但我会尝试在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

希望这对你有用。

另外,如果上面的实例定义成功完成,它将简化一些事情。我让你填补空缺。


15
为什么这个问题被关闭了,它是一个合法的问题,询问如何计算四元数的逆。难道 StackOverflow 变得过于严格了吗? - kaalus

1

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