Kwaterniony
Kwaterniony
O kwaterianach nie slyszalem, ale kwateriony przydaja sie do opisywania czesci izometrii R3 i podobno mozna to wykorzystac w grafice 3D. Pozdrwawiam.
Kwaterniony
MYŚLĘ ŻE CHODZI O KWATERNIONY. MAM PODOBNY PROBLEM.PROSZĘ O ICH ZASTOSOWANIE NP. W FIZYCE,
Kwaterniony
to liczba postaci a+ib+jc+kd gdzie a,b,c,d to liczby rzeczywiste a ijk spelniają nastepujace warunki:
j*j=i*i=k*k=i*j*k=-1
j*j=i*i=k*k=i*j*k=-1
-
- Użytkownik
- Posty: 3
- Rejestracja: 30 cze 2004, o 23:00
- Płeć: Mężczyzna
- Lokalizacja: From HELL
Kwaterniony
kwaterniony używane są w programowaniu grafiki 3d przy reprezentacji obrotów
1. Co to jest kwaternion?
Kwaternion można zapisać w postaci
q = q0 + i*q1 + j*q2 + k*q3
Współczynniki qi są liczbami rzeczywistymi.
Inna, spotykana czasem, forma zapisu kwaternionów:
Q = q0 + q
gdzie q0 to liczba rzeczywista, a q to wektor rzeczywisty.
Umożliwia to traktowanie wektorów jako kwaternionów z zerową częścią skalarną.
2. Działania na kwaternionach
dla pierwszego zapisu
Działania dodawania i mnożenia kwaternionowego są zdefiniowane jak dla liczb, z tym że mnożenie jest przemienne tylko w przypadku mnożenia przez liczbę.
Mnożenie wyróżnionych elementów i, j, k opisane jest w tabelce (a*b)
a\b 1 i j k
1 1 i j k
i i -1 k -j
j j -k -1 i
k k j -i -1
Czyli np. mnożąc dwa kwaterniony
q1 = 1 + i + k
q2 = 2 + i + j
otrzymamy
q3 = q1*q2 = (1 + i + k) * (2 + i + j)
= 2 + i + j + 2i - 1 + k + 2k + j - i
= 1 + 2i + 2j + 3k
dla drugiego zapisu
Tutaj mnożenie kwaternionów można zapisać jako:
R = P*Q = r0 + r
r0 = p0*q0 -
r = p0*q + q0*p + p@q
gdzie @ oznacza iloczyn wektorowy
a oznacza iloczyn skalarny
Wtedy kwaternion odwrotny spełnia równanie Q^(-1)*Q = 1.
Kwaternion sprzężony to Qsp = q0 - q
Długość kwaternionu to wartość |Q| = sqrt(Q*Qsp)
3. Reprezentacja obrotów za pomocą kwaternionów
Obrót o kąt 'fi' wokół osi n jest opisany kwaternionem:
Q = cos(0.5*fi) + n*sin(0.5*fi)
to oznacza, że jeśli wektor n ma współrzędne w bazie ortonormalnej
n = n1*e1 + n2*e2 + n3*e3
to
Q = cos(0.5*fi) + (i*n1 + j*n2 + k*n3) * sin(0.5*fi)
Jeśli wektor v będzie reprezentowany przez kwaternion
v = 0 + v1*i + v2*j + v3*k
wtedy obrót tego wektora o kąt 'fi' można zdefiniować jako
v' = Q*v*Q^(-1)
Jeśli n jest wersorem (jego długość jest równa 1) to Q jest jednostkowy i Qsp = Q^(-1). Ta własność pozwala zapisać obrót jako
v' = Q*v*Qsp
Przypominam, że Qsp to kwaternion sprzężony.
Przy takich założeniach, każdy obrót jest określony przez dokładnie dwa kwaterniony jednostkowe: Q i Qsp.
Obrót zdefiniowany przez Q, po którym następuje obrót zdefiniowany przez P opisywany jest przez kwaternion
R = P*Q
v' = R*v*Rsp = P*Q*v*Qsp*Psp
Jeśli kwaterniony nie są jednostkowe, to obrót kwaternionem Q połączony jest z powiększeniem obracanego wektora Q*Qsp razy.
5. Interpolacja obrotu
Bardzo przydatne przy wykorzystaniu obrotów jest ich interpolowanie. Polega to na tym, że mamy początkowe położenie (obrót o 0 stopni) i położenie końcowe opisane kwaternionem Qk. Wtedy obrót możemy przeprowadzić płynnie. Niech trwa on od chwili t=0 do t=1. Kwaternion opisujący położenie w dowolnej chwili czasu 't' jest następujący:
Q(t) = [1*(1-t) + Qk*t] / |[1*(1-t) + Qk*t]|
|| oznacza długość kwaternionu.
t jest z przedziału (0,1]
1. Co to jest kwaternion?
Kwaternion można zapisać w postaci
q = q0 + i*q1 + j*q2 + k*q3
Współczynniki qi są liczbami rzeczywistymi.
Inna, spotykana czasem, forma zapisu kwaternionów:
Q = q0 + q
gdzie q0 to liczba rzeczywista, a q to wektor rzeczywisty.
Umożliwia to traktowanie wektorów jako kwaternionów z zerową częścią skalarną.
2. Działania na kwaternionach
dla pierwszego zapisu
Działania dodawania i mnożenia kwaternionowego są zdefiniowane jak dla liczb, z tym że mnożenie jest przemienne tylko w przypadku mnożenia przez liczbę.
Mnożenie wyróżnionych elementów i, j, k opisane jest w tabelce (a*b)
a\b 1 i j k
1 1 i j k
i i -1 k -j
j j -k -1 i
k k j -i -1
Czyli np. mnożąc dwa kwaterniony
q1 = 1 + i + k
q2 = 2 + i + j
otrzymamy
q3 = q1*q2 = (1 + i + k) * (2 + i + j)
= 2 + i + j + 2i - 1 + k + 2k + j - i
= 1 + 2i + 2j + 3k
dla drugiego zapisu
Tutaj mnożenie kwaternionów można zapisać jako:
R = P*Q = r0 + r
r0 = p0*q0 -
r = p0*q + q0*p + p@q
gdzie @ oznacza iloczyn wektorowy
a oznacza iloczyn skalarny
Wtedy kwaternion odwrotny spełnia równanie Q^(-1)*Q = 1.
Kwaternion sprzężony to Qsp = q0 - q
Długość kwaternionu to wartość |Q| = sqrt(Q*Qsp)
3. Reprezentacja obrotów za pomocą kwaternionów
Obrót o kąt 'fi' wokół osi n jest opisany kwaternionem:
Q = cos(0.5*fi) + n*sin(0.5*fi)
to oznacza, że jeśli wektor n ma współrzędne w bazie ortonormalnej
n = n1*e1 + n2*e2 + n3*e3
to
Q = cos(0.5*fi) + (i*n1 + j*n2 + k*n3) * sin(0.5*fi)
Jeśli wektor v będzie reprezentowany przez kwaternion
v = 0 + v1*i + v2*j + v3*k
wtedy obrót tego wektora o kąt 'fi' można zdefiniować jako
v' = Q*v*Q^(-1)
Jeśli n jest wersorem (jego długość jest równa 1) to Q jest jednostkowy i Qsp = Q^(-1). Ta własność pozwala zapisać obrót jako
v' = Q*v*Qsp
Przypominam, że Qsp to kwaternion sprzężony.
Przy takich założeniach, każdy obrót jest określony przez dokładnie dwa kwaterniony jednostkowe: Q i Qsp.
Obrót zdefiniowany przez Q, po którym następuje obrót zdefiniowany przez P opisywany jest przez kwaternion
R = P*Q
v' = R*v*Rsp = P*Q*v*Qsp*Psp
Jeśli kwaterniony nie są jednostkowe, to obrót kwaternionem Q połączony jest z powiększeniem obracanego wektora Q*Qsp razy.
5. Interpolacja obrotu
Bardzo przydatne przy wykorzystaniu obrotów jest ich interpolowanie. Polega to na tym, że mamy początkowe położenie (obrót o 0 stopni) i położenie końcowe opisane kwaternionem Qk. Wtedy obrót możemy przeprowadzić płynnie. Niech trwa on od chwili t=0 do t=1. Kwaternion opisujący położenie w dowolnej chwili czasu 't' jest następujący:
Q(t) = [1*(1-t) + Qk*t] / |[1*(1-t) + Qk*t]|
|| oznacza długość kwaternionu.
t jest z przedziału (0,1]