Kwaterniony mi jakoś żyć nie dają. To kuszą mnie, to straszą. W związku z kwaternionami popełniłem kiedyś całkiem niezłą notkę: „Z wizytą u Państwa Ikosińskich czyli jak znaleźć Prawdziwą Miłoś”. Literka „ć” już się w tytule nie zmieściła. W związku z kwaternionami pisałem kiedyś o konspiracyjnej teorii równań Maxwella „Maxwell i kwaterniony – Cz. 3„. No i teraz mi znowu zeszło na kwaterniony i to przez nie właśnie opóźniłem się we wszystkim innym, w tym także w pisaniu notek.
Tak z grubsza o co idzie: W komentarzu pod poprzednią notką podałem link do publikacji dwojga autorek – w publikacji podany jest algorytm wyliczenia kręcenia się swobodnego bąka, może to być też gajka Dzabenikowa. Kilka formuł w tej publikacji mi się nie podobało – moim zdaniem są błędne. Napisałem do jednej z autorek. Ale ona zajęta jest aktualnie czym innym – zajmowała się swobodnymi bąkami osiem lat temu. Grzechów nie pamięta. Prócz publikacji jest także kod komputerowy, w Fortranie. Poprosiłem o ten kod i zacząłem się mu przyglądać. Programistą zawodowym nie jestem, jestem, zapewne jak wielu, samoukiem. Więc nie przyszło mi to łatwo.
Zauważyłem, że błędy w formułach w pracy na kod nie mają wpływu, bowiem w kodzie z tych formuł się nie korzysta. Zacząłem kręcić gajkami kodem w Fortranie i moim własnym kodem przy użyciu programu Mathematica. Wyniki się zgadzały, ale tylko do czasu. W pewnym momencie przestały się zgadzać. Ktoś ma błąd. Albo oni, albo ja, albo to wyższe ja, co porównuje i źle porównuje.
Rozbieżności wyszły przy kwaternionach i to tylko w szczególnym przypadku, gdy fikanie jest takie, że jest tylko jeden fik w całym życiu gajki.
Zostawiłem na boku mój program i zająłem się wyłącznie programem Fortranowym. No i wczoraj znalazłem w nim sprzeczność. Napisałem więc do jednej z autorek wskazując na tą sprzeczność z imienia i nazwiska.
Zobaczymy czy i co odpisze. Oczywiście nie napisałem wprost: „kod jest błędny”. Napisałem, że wydaje mi się, że jakby były małe problemy, że może ktoś z jej grupy zechce się do tych moich problemów ustosunkować.
No bo faktycznie, przecież to ja mogę widzieć problemy tam gdzie ich nie ma. A nie ma się kogo poradzić.
W czym rzecz? Obroty w przestrzeni trójwymiarowej można kodować przy pomocy macierzy, ale można też kodować przy pomocy kwaternionów. Macierz obrotu to tabelka 3x3, czyli 9 liczb. Można je ustawiać w kolumienki lub w wiersze. Każda kolumienka to wektor o długości 1, trzy kolumienki to trzy wzajemnie prostopadłe wektory. Podobnie gdy zamiast kolumienek zabieramy się za wiersze. To dużo roboty. Tą samą informację co w macierzy 3x3 (9 liczb, ale z dodatkowymi warunkami) można zakodować w jednym jednostkowym kwaternionie – cztery liczby rzeczywiste, suma ich kwadratów jest 1. Do obliczeń to lepsze. Twórcy gier komputerowych, ludzie od robotyki, od sterowania satelitów, oni często wolą do rachunków kwaterniony.
O związku kwaternionów z macierzami obrotów można poczytać na przykład w Wikipedii:
Rotation formalisms in three dimensions
Kod w Fortranie tych pań ma dwie części. Jedna opisuje kręcenie przy pomocy macierzy, druga przy pomocy kwaternionów. Od kwaternionów do obrotów przechodzimy formułą Eulera-Rodriguesa. W tym artykule w Wikipedii wygląda ona tak:
Otóż stwierdziłem, że w szczególnym przypadku jednego fiku obrót wyliczony jako macierz i obrót wyliczony jako kwaternion – nie zgadzają się. A powinny się zgadzać.
Zajęło mi to trochę czasu – stąd i zwłoka i zawalenie innych spraw.
Komentarze