2011-07-14 10 views
9

こんにちは私は四元数の逆数を計算する方法を理解しようとしています。コード例はすばらしいでしょう。 Matrix and Quaternion FAQクォータニオン逆を計算する

乾杯

+1

@TabbyCoolどのように彼は何を "試してみましょう"?彼は文字通りペンとメモ帳を手に入れ、数百年の人類を理解する数学的な作品を再発見すると期待していますか? – MaiaVictor

答えて

8

クォータニオン計算全体については、Wikipedia articleを参照してください。

あなたはどの言語を使用したいのか分かりませんが、私はハスケルでいくつかのヒントを出そうとします。

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' 

スカラーとの乗算は、変換を介して行われるべきである:

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) 

今、逆:

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_inverse q = (q_conjugate q) * (scalar_to_q (m * m)) 
    where 
    m = q_modulus q 

希望します。

PS:上記のインスタンス定義は、正常に完了した場合は少し簡単になります。私はあなたがギャップを埋めることができます。

+0

ありがとうございます。素晴らしい答え! – user346443

+10

この質問はなぜ閉じられるのですか?四元数の逆数を計算する方法を尋ねる正当な質問です。 StackOverflowが過度にモデレートされていませんか? – kaalus

1

ルック。いくつかのコードサンプルもあります。

関連する問題