11

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

乾杯

4

2 に答える 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

お役に立てば幸いです。

PS:上記のインスタンス定義は、正常に完了すると少し単純化されます。ギャップを埋めさせます。

于 2011-07-14T07:58:09.217 に答える
1

マトリックスとクォータニオンのFAQをご覧ください。いくつかのコードサンプルもあります。

于 2011-07-14T07:53:07.653 に答える