Postoje točno četiri normirane djeljive algebre (prema Hurwitzovom teoremu):
- Skup realnih brojeva (R)
- Skup kompleksnih brojeva (C)
- Skup kvaterniona (H)
- Skup oktoniona (O)
Davne 1835. Sir William Rowan Hamilton otkrio je da je kompleksne brojeve moguće gledati kao parove realnih brojeva i kao takve ih prikazati u dvodimenzionalnom prostoru. Naravno, to ga je potaknulo da otkrije postoji li takva algebra nad realnim brojevima koja bi omogućavala prikaz u trodimenzionalnom prostoru. Potrošio je godine pokušavajući definirati potrebnu trojku realnih brojeva. Problem je bio u kvocijentu. Tako mu je jednog dana 1843. u štenji sa svojom ženom na pamet palo rješenje problema kvocijenta - kvaternion! Iz nekog razloga, požurio je ugrebati rješenje na most preko kojeg su prolazili. Kasnije je to otkriće (i čin vandalizma) obilježeno natpisom na tom mostu.
Kompleksni brojevi se obično zapisuju u obliku a+bi gdje je a realni dio, a b imaginarni dio (i je imaginarna jedinica). Postavimo li dvodimenzionalni koordinatni sustav u kojem jednu os predstavlja realni, a drugu imaginarni dio kompleksnog broja dobijamo reprezentaciju kompleksnog broja u obliku točke (vektora).
Preuzeto s http://en.wikipedia.org/wiki/Complex_number
Također, kompleksne brojeve moguće je prikazati i u obliku matrice:
Preuzeto s http://en.wikipedia.org/wiki/Complex_number
Također, kompleksne brojeve moguće je prikazati i u obliku matrice:
a | -b | ||
b | a |
Obično se zapisuju u obliku q=a+bi+cj+dk gdje je a realni dio, a b, c i d imaginarni dio (i, j i k su imaginarne jedinice). Može se reći da se radi o sustavu brojeva primjenjivom na trodimenzionalni prostor, a za pojedini da je kvocijent dvaju vektora u trodimenzionalnom prostoru. Kvaternioni se mogu prikazivati i kao zbroj skalara i vektora, tj. q=(a,v), v=(b,c,d) gdje je a skalar, v vektor, a (b,c,d) komponente vektora v. Nad kvaternionima su definirane tri osnovne operacije: zbrajanje, skalarno množenje i kvaternionsko množenje.
Kao i kompleksni brojevi, kvaternioni se također mogu jednostavno prikazati u matrici:
Zbrajanje kvaterniona je jednostavno - zbroje se pripadajući koeficijenti:
q = a + bi + cj + dk
p = x + yi + zj + wk
q + p = (a + x) + (b + y)i + (c + z)j + (d + w)k
Množenje kvaterniona skalarom također je jednostavno - množi se skalar (x) sa svakim koeficijentom:
q = a + bi + cj + dk
xq = qx = xa + xbi + xcj + xdk
Množenje kvaterniona je ono što je obilježilo Hamiltonovo otkriće. Temeljna postavka ove operacije je:
i2 = j2 = k2 = ijk = -1
Izvođenjem, dobivaju se ove jednakosti:
Iz ovih jednakosti može se primjetiti jedno važno svojstvo množenja kvaterniona - komutativnost NE VRIJEDI! Prema tome, veoma je važan poredak operanada kod operacije množenja. Samo množenje provodi se pravilom "svaki sa svakim":
q = a + bi + cj + dk
p = x + yi + zj + wk
qp = ax + ayi + azj + awk +
bxi + byi2 + bzij + bwik +
cxj + cyji + czj2 + cwjk +
dxk + dyki + dzkj + dwk2
Kao i kompleksni brojevi, kvaternioni se također mogu jednostavno prikazati u matrici:
a | b | c | d | ||
-b | a | -d | c | ||
-c | d | a | -b | ||
-d | -c | b | a |
Zbrajanje kvaterniona je jednostavno - zbroje se pripadajući koeficijenti:
q = a + bi + cj + dk
p = x + yi + zj + wk
q + p = (a + x) + (b + y)i + (c + z)j + (d + w)k
Množenje kvaterniona skalarom također je jednostavno - množi se skalar (x) sa svakim koeficijentom:
q = a + bi + cj + dk
xq = qx = xa + xbi + xcj + xdk
Množenje kvaterniona je ono što je obilježilo Hamiltonovo otkriće. Temeljna postavka ove operacije je:
i2 = j2 = k2 = ijk = -1
Izvođenjem, dobivaju se ove jednakosti:
ij = k | ji = -k |
jk = i | kj = -i |
ki = j | ik = -j |
Iz ovih jednakosti može se primjetiti jedno važno svojstvo množenja kvaterniona - komutativnost NE VRIJEDI! Prema tome, veoma je važan poredak operanada kod operacije množenja. Samo množenje provodi se pravilom "svaki sa svakim":
q = a + bi + cj + dk
p = x + yi + zj + wk
qp = ax + ayi + azj + awk +
bxi + byi2 + bzij + bwik +
cxj + cyji + czj2 + cwjk +
dxk + dyki + dzkj + dwk2
U računalnoj grafici, rotacija se obično provodi korištenjem matrica transformacije, ali je isti efekt moguće postići i kvaternionima. Kvaternion, obzirom da sadrži četiri realna koeficijenta je savršen za opisivanje rotacije - ima kut rotacije i vektor koji definira os rotacije.
Ovdje je kvaternion q prikazan kao zbroj skalara(w) i vektora (x, y, z). α je kut rotacije, a u→ je jedinični (normalizirani) vektor koji predstavlja os rotacije. Neka je v→ neki vektor u trodimenzionalnom prostoru koji želimo rotirati. Tada se rotirani vektor računa ovako:
v'→ = qv→q-1
Postavlja se pitanje umnoška vektora i kvaterniona - vektor se može predstaviti kao kvaternion kojemu je realni koeficijent jednak 0, takle v→(x, y, z) = 0 + xi + yj + zk. Također treba spomenuti da se q-1 računa slično kao i kod kompleksnih brojeva:
Slikom to izgleda ovako:
Zelena kružnica predstavlja moguće točke P1 nakon rotacije za neki kut oko "Rotation Axis" osi.
q = w + xi + yj + zk = w + (x, y, z) = cos( | α | ) + u→ sin( | α | ) |
2 | 2 |
v'→ = qv→q-1
Postavlja se pitanje umnoška vektora i kvaterniona - vektor se može predstaviti kao kvaternion kojemu je realni koeficijent jednak 0, takle v→(x, y, z) = 0 + xi + yj + zk. Također treba spomenuti da se q-1 računa slično kao i kod kompleksnih brojeva:
q-1 = | q* | , q* = cos( | α | ) - sin( | α | )k, ||q|| = √ | cos2( | α | ) + sin2( | α | ) |
||q|| | 2 | 2 | 2 | 2 |
Slikom to izgleda ovako:
Zelena kružnica predstavlja moguće točke P1 nakon rotacije za neki kut oko "Rotation Axis" osi.
Slijedeća tablica prikazuje usporedbu broja operacija kod lančanja matrica i lančanja kvaterniona. Jasno se vidi da ulančavanje kvaterniona zahtijeva mnogo manje operacija od ulančavanja matrica i prema tome, efikasnije je koristiti kvaternione.
U slijedećoj tablici prikazana je usporedba matrica i kvaterniona pri operaciji rotiranja vektora. Ovaj put matrica pobjeđuje, no kako je kvaternion trivijalno pretvoriti u matricu, gotovo bez troška možemo pri rotaciji vektora kvaternion pretvoriti u matrični oblik te potom rotirati vektor, što i mnogi sustavi rade.
Uzmimo u obzir još i prednost kvaterniona po pitanju prostora. U memoriji, kvaternion je predočen s četiri decimalna broja. Matrica, s druge strane, zahtijeva čak 16 brojeva, što je četiri puta više pa je i po pitanju memorije kvaternion bolji. Zadnja prednost kvaterniona je matematička stabilnost, no to neću ovdje spominjati.
Metoda | Broj množenja | Broj zbrajanja | Broj operacija |
Matrice | 27 | 18 | 45 |
Kvaternion | 16 | 12 | 28 |
Metoda | Broj množenja | Broj zbrajanja | Broj operacija |
Matrica | 9 | 6 | 15 |
Kvaternioni | 21 | 18 | 39 |
DirectX i XNA imaju podršku za rad s kvaternionima, dok je u OpenGLu potrebno koristiti vanjske biblioteke ili isprogramirati vlastitu podršku. U DirectX/XNA kvaternioni su u stvari uobičajeni objekti koje obično koristimo s gotovim metodama. Programer nema potrebu poznavati matematiku iza operacija, a kvaternione može graditi iz matrica, Eulerovih kuteva ili jednostavno vektora (os) i skalara(kut). Na isti način ih i koristi.