2011-07-14 10 views
9

Cześć Próbuję dowiedzieć się, jak obliczyć odwrotność kwaternion. Przykład kodu byłby świetny.Oblicz kwaternion Inverse

Cheers

+1

@TabbyCool Jak on "spróbuje" cokolwiek? Czy spodziewasz się, że dosłownie dostanie pióro i notatnik i odkryje na nowo matematyczne dzieło, które zajęło ludzkości przez setki lat? – MaiaVictor

Odpowiedz

8

Zobacz Wikipedia article dla całej czwartorzędnej matematyki.

Nie wiem, jakiego języka chcesz użyć, ale postaram się podać kilka wskazówek w Haskell.

data Quaternion = Q Double Double Double Double deriving (Show, Eq) 

Najpierw należy wprowadzić mnożenie i dodawanie kwaternionów.

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' 

mnożenie skalarne powinno się odbywać za pomocą konwersji:

scalar_to_q a = Q a 0 0 0 

zdefiniować

i = Q 0 1 0 0 
j = Q 0 0 1 0 
k = Q 0 0 0 1 

Następnie realizacji koniugatu i moduł:

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) 

Teraz odwrotność :

q_inverse q = (q_conjugate q) * (scalar_to_q (m * m)) 
    where 
    m = q_modulus q 

Mam nadzieję, że przyda się.

PS: powyższa definicja instancji uprości pewne czynności po pomyślnym zakończeniu. Pozwalam ci wypełnić luki.

+0

Dziękuję. Niesamowita odpowiedź! – user346443

+10

Dlaczego to pytanie jest zamknięte, jest to uzasadnione pytanie z pytaniem, jak obliczyć odwrotność kwaternionu. Czy StackOverflow nie jest zbytnio moderowany? – kaalus