2011-07-14 186 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