Obliczenie W z X, Y, Z (Kwaterniony)

Obiekty i przekształcenia geometryczne, opisane za pomocą układu (nie zawsze prostokątnego) współrzędnych.
mwl4
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 2 maja 2012, o 18:00
Płeć: Mężczyzna
Lokalizacja: Wszechświat
Podziękował: 1 raz

Obliczenie W z X, Y, Z (Kwaterniony)

Post autor: mwl4 »

Potrzebuję obliczyć oś W w kwaternionach. Interesuje mnie tylko obrót. Prawdopodobnie jest to wzór:
\(\displaystyle{ W = 2\sin ^{-1} \sqrt{x ^{2}+ y ^{2}}}\)
Mam już kilka przykładów już obliczonych, lecz nie mam wzoru, np.
\(\displaystyle{ W = -0.33050531 \\
X = 0.054875005 \\
Y = 0.14944471 \\
Z = 0.93028021}\)


Coś znalazłem o obrocie, na angielskiej wikipedii:
... l_rotation

W szkole nie miałem jeszcze o sinusach i cosinusach, ale może na kalkulatorze systemowym (Naukowy/Programisty) sobie poradzę

Jeśli w złym dziale proszę moderatora o przeniesienie.
Ostatnio zmieniony 2 maja 2012, o 18:44 przez lukasz1804, łącznie zmieniany 1 raz.
Powód: Niepoprawnie napisany kod LaTeX-a. Proszę zapoznaj się z http://matematyka.pl/178502.htm . Poprawa wiadomości.
olekp
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 8 maja 2012, o 09:14
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy
Pomógł: 2 razy

Obliczenie W z X, Y, Z (Kwaterniony)

Post autor: olekp »

Dla obrotu o kąt \(\displaystyle{ \alpha}\) masz \(\displaystyle{ W = \cos \frac{\alpha}{2}}\). Kwaterniony do obrotów mają normę jednostkową, czyli dla kwaternionu \(\displaystyle{ Q = W + X\mathbf{i} + Y\mathbf{j} + Z\mathbf{k}}\) jest zawsze \(\displaystyle{ \sqrt{X^2+Y^2+Z^2+W^2} = 1}\). Stąd obliczasz \(\displaystyle{ W = \pm \sqrt{1-(x^2+y^2+z^2)}}\) w przedziale od \(\displaystyle{ -1}\) do \(\displaystyle{ 1}\). Znak \(\displaystyle{ W}\) zależy od kąta: dla \(\displaystyle{ 0^\circ \le \alpha \le 180^\circ}\) jest plus, a dla \(\displaystyle{ 180^\circ < \alpha \le 360^\circ}\) jest minus.
mwl4
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 2 maja 2012, o 18:00
Płeć: Mężczyzna
Lokalizacja: Wszechświat
Podziękował: 1 raz

Obliczenie W z X, Y, Z (Kwaterniony)

Post autor: mwl4 »

No dobra, a co się dzieje kiedy w 1 osi mam 180 stopni i w drugiej chcę mieć np. 30 stopni.
\(\displaystyle{ 180 / 2 = 90}\)
\(\displaystyle{ Sin(90) = 1}\)
\(\displaystyle{ 30 / 2 = 15}\)
\(\displaystyle{ Sin(15) = 0,25881905}\)
Problem pojawia się kiedy:
\(\displaystyle{ \sqrt{1^2+ 0,25881905^2+0^2+?^2} = 1}\)
Jaką kolwiek dałbym wartość pod "?" To zawsze będzie więcej niż 1. Jakiś pomysł?
olekp
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 8 maja 2012, o 09:14
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy
Pomógł: 2 razy

Obliczenie W z X, Y, Z (Kwaterniony)

Post autor: olekp »

Co to dla Ciebie znaczy, że masz w jednej osi 180 stopni, a w drugiej 30 stopni? Jeden obrót jest dookoła jednej osi i kąt obrotu jest mierzony w płaszczyźnie prostopadłej do tej osi. Jeden kwaternion dotyczy jednego obrotu. Dlatego nie wychodzi Ci jedynka. Chcesz zrobić jeden kwaternion do dwóch obrotów.

Rozumiem, że masz zamysł składać 3 obroty ze sobą tak, żeby każdy był dookoła jednej z osi układu współrzędnych. Jeśli tak, to mnożysz odpowiednie kwaterniony (uwaga, bo ma znaczenie ich kolejność!). Ale najpierw zrób sobie osobno po jednym kwaternionie na jedną oś. Będzie Ci łatwiej, bo iloczyn 3 kwaternionów w ogólnej postaci to dość długi wzór.

Masz sinus połowy kąta obrotu. Ok. Zrób tak. Jeśli twoją osią obrotu jest zawsze oś układu współrzędnych, to mnożysz ten sinus przez wektor jednostkowy osi X (czyli \(\displaystyle{ \mathbf{i}}\)), albo osi Y (czyli \(\displaystyle{ \mathbf{j}}\)), albo osi Z (czyli \(\displaystyle{ \mathbf{k}}\)). Do tego dodajesz cosinus połowy kąta (dla 180 stopni będzie zero).

Weź sobie prosty przykład. Obrócimy wektor (1,1,0) naokoło osi X o 180 stopni. Dostaniemy (1,-1,0) prawda? Kwaternion do obrotu to \(\displaystyle{ \mathbf{q} = \cos(90) + \mathbf{i} \sin(90) = \mathbf{i}}\). Obracamy wektor (1,1,0), czyli \(\displaystyle{ \mathbf{i}+\mathbf{j}}\) w taki sposób: \(\displaystyle{ \mathbf{q}(\mathbf{i}+\mathbf{j})\mathbf{q}^* = (\mathbf{i})(\mathbf{i}+\mathbf{j})(-\mathbf{i}) = (\mathbf{i}^2+\mathbf{i}\mathbf{j})(-\mathbf{i}) = (-1 + \mathbf{k})(-\mathbf{i}) = \mathbf{i} - \mathbf{k}\mathbf{i} = \mathbf{i} - \mathbf{j}}\) = (1,-1,0). Wszystko się zgadza. To weź teraz obrót o 30 stopni wokół osi Y. Kwaternion jest taki \(\displaystyle{ \cos(15) + \mathbf{j} \sin(15)}\). Jeśli składasz oba obroty, to mnożysz kwaterniony i dostajesz \(\displaystyle{ \mathbf{i} (\cos(15) + \mathbf{j} \sin(15)) = \mathbf{i} \cos(15) + \mathbf{k} \sin(15)}\). Reguły mnożenia masz . Daj sobie spokój z normowaniem wyniku. W powyższy sposób mnożysz już unormowane, więc wynik zawsze będziesz miał też unormowany i po kłopocie.

W związku z powyższym przykład, który podałeś naprawia się tak: \(\displaystyle{ \sqrt{\cos (15)^2+0^2+\sin (15)^2+0^2} = 1}\).

Jeśli masz jakąś dowolną oś obrotu, to weź \(\displaystyle{ \mathbf{\omega} = (x,y,z) = x\mathbf{i}+y\mathbf{j}+z\mathbf{k}}\), czyli unormowany wektor w kierunku tej osi (tzw. wersor) i kąt obrotu \(\displaystyle{ \alpha}\) (zwrot wektora określasz regułą prawej ręki). Żeby unormować wektor dzielisz każdą jego współrzędną x, y i z przez długość wektora \(\displaystyle{ \sqrt{x^2+y^2+z^2}}\). Dopiero potem robisz kwaternion tak: \(\displaystyle{ \mathbf{q} = \cos \frac{\alpha}{2} + \sin \frac{\alpha}{2} \mathbf{\omega} = \cos \frac{\alpha}{2} + x\sin \frac{\alpha}{2}\mathbf{i}+y\sin \frac{\alpha}{2}\mathbf{j}+z\sin \frac{\alpha}{2}\mathbf{k}}\). Będzie on już automatycznie unormowany. Możesz składać dowolną ilość takich obrotów ze sobą i dostajesz w wyniku jeden "obrót zastępczy" na ogół o inny kąt dookoła innej osi. Aby zastosować ten kwaternion do obrócenia jakiegoś wektora mnożymy wektor z lewej przez kwaternion, a z prawej przez kwaternion sprzężony (ma znaki przy \(\displaystyle{ \mathbf{i}}\), \(\displaystyle{ \mathbf{j}}\) oraz \(\displaystyle{ \mathbf{k}}\) zmienione na przeciwne).
ODPOWIEDZ