2011-07-14 117 views
9

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

干杯

+1

@TabbyCool他会如何“尝试”任何东西?你是否期望他能够从字面上得到一支笔和一个记事本,并重新发现一段数百年的人类数学知识? – MaiaVictor

回答

8

查看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:如果成功完成,上面的实例定义将简化一些事情。我让你填补空白。

+0

谢谢。真棒回答! – user346443

+10

为什么这个问题是关闭的,这是一个合法的问题,问如何计算四元数的倒数。是不是StackOverflow变得过度主持? – kaalus