szukanie zaawansowane
 [ Posty: 4 ] 
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 2 maja 2012, o 18:29 
Użytkownik

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

Coś znalazłem o obrocie, na angielskiej wikipedii:
http://en.wikipedia.org/wiki/Quaternion ... 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.
Góra
Mężczyzna Offline
PostNapisane: 9 maja 2012, o 18:28 
Użytkownik

Posty: 27
Lokalizacja: Wrocław
Dla obrotu o kąt \alpha masz W = \cos \frac{\alpha}{2}. Kwaterniony do obrotów mają normę jednostkową, czyli dla kwaternionu Q = W + X\mathbf{i} + Y\mathbf{j} + Z\mathbf{k} jest zawsze \sqrt{X^2+Y^2+Z^2+W^2} = 1. Stąd obliczasz W = \pm \sqrt{1-(x^2+y^2+z^2)} w przedziale od -1 do 1. Znak W zależy od kąta: dla 0^\circ \le \alpha \le 180^\circ jest plus, a dla 180^\circ < \alpha \le 360^\circ jest minus.
Góra
Mężczyzna Offline
PostNapisane: 27 wrz 2012, o 16:39 
Użytkownik

Posty: 3
Lokalizacja: Wszechświat
No dobra, a co się dzieje kiedy w 1 osi mam 180 stopni i w drugiej chcę mieć np. 30 stopni.
180 / 2 = 90
Sin(90) = 1
30 / 2 = 15
Sin(15) = 0,25881905
Problem pojawia się kiedy:
\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ł?
Góra
Mężczyzna Offline
PostNapisane: 7 paź 2012, o 04:15 
Użytkownik

Posty: 27
Lokalizacja: Wrocław
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 \mathbf{i}), albo osi Y (czyli \mathbf{j}), albo osi Z (czyli \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 \mathbf{q} = \cos(90) + \mathbf{i} \sin(90) = \mathbf{i}. Obracamy wektor (1,1,0), czyli \mathbf{i}+\mathbf{j} w taki sposób: \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 \cos(15) + \mathbf{j} \sin(15). Jeśli składasz oba obroty, to mnożysz kwaterniony i dostajesz \mathbf{i} (\cos(15) + \mathbf{j} \sin(15)) = \mathbf{i} \cos(15) + \mathbf{k} \sin(15). Reguły mnożenia masz tutaj. 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: \sqrt{\cos (15)^2+0^2+\sin (15)^2+0^2} = 1.

Jeśli masz jakąś dowolną oś obrotu, to weź \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 \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 \sqrt{x^2+y^2+z^2}. Dopiero potem robisz kwaternion tak: \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 \mathbf{i}, \mathbf{j} oraz \mathbf{k} zmienione na przeciwne).
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 4 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 Wzór na obliczenie stycznej sfery w przestrzenii  ruben  12
 Wektor - obliczenie odchylenia i wysokosci  Myrag  0
 Obliczenie krzywizny krzywej  Bad Shadow  3
 Wyznaczenie pkt oraz obliczenie pola trójkąta  Arek1992  1
 Obliczenie pola trójkąta  ColoColo  3
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl