I quaternioni
I quaternioni sono oggetti matematici inventati nel 1843 da Sir R. Hamilton e, dal nostro punto di vista, possono essere considerati come un estensione dei numeri complessi.
Questa appendice provvede un riassunto di quella che e l'algebra dei qua-ternioni e di come essi possano rappresentare rotazioni ed interpolazioni di rotazioni. Gli articoli di riferimento in questo ambito sono [25] e [4].
C.1 Algebra dei quaternioni
Un quaternione e dato da q = w + xi + yj + zk, dove w,x,y e z sono numeri reali.
L'addizione di due quaternioni q0 e q1 si esegue nel seguente modo:
q0 q1 = w0 w1+ (x0 x1)i + (y0 y1)j + (z0 z1)k (C.1)
Le moltiplicazioni per gli elementi primitivi i,j e k sono denite da: i2 = j2 = k2 = 1, ij = ji = k, jk = kj = i e ki = ik = j. La
I quaternioni
moltiplicazione di quaternioni si esegue allora al seguente modo: q0q1 = (w0+ x0i + y0j + z0k)(w1+ x1i + y1j + z1k) = = (w0w1 x0x1 y0y1 z0z1)+ (w0x1+ x0w1+ y0z1 z0y1)i+ (w0y1 x0z1+ y0w1+ z0x1)j+ (w0z1+ x0y1 y0x1+ z0w1)k (C.2)
La moltiplicazione dei quaternioni non e commutativa, in quanto q0q1 6=
q1q0.
Si denisce il coniugato do un quaternione con:
q = (w + xi + yj + zk) = w xi yj zk (C.3)
Il coniugato di un prodotto di quaternioni soddisfa le prioprieta (p) = p
e (pq) = qp.
La norma di un quaternione si denisce come:
N(q) = w2+ x2 + y2+ z2 (C.4)
La norma e una funzione a valori reali e soddisfa le proprieta: N(q) =
N(q) e, per il prodotto, N(pq) = N(p)N(q).
Si denisce q 1 l'inverso di un quaternione q. Esso gode della proprieta
q 1q = 1 e si costruisce come:
q 1 = q
N(q) (C.5)
dove la divisione di un quaternione per un numero reale e la semplice divi-sione componenente per componente. L'inverso gode anche delle proprieta: (p 1) 1 = p e (pq) 1 = q 1p 1.
Spesso si indica w come la parte reale e v = (x; y; z) come la parte vetto-riale del quaternione, scrivendo cos q = (w + v). E' utile notare che la parte reale di q si puo ottenere come w = (q + q)=2. Con questa notazione, si puo
scrivere la moltiplicazione di quaternioni usando il prodotto scalare () ed il prodotto vettoriale () di due vettori:
In questa forma e chiaro che q0q1 = q1q0 se e solo se v0 v1 = 0 (i vettori
sono paralleli).
Un quaternione q puo anche essere visto come un vettore a 4 dimensioni (w; x; y; z) e se ne denisce il prodotto scalare come:
q0 q1 = (w0w1+ x0x1 + y0y1+ z0z1) (C.7)
ossia e la parte reale di q0q1.
Si denisce il quaternione unitario un quaternione q per il quale vale N(q) = 1. Geometricamente esso rapprresenta una ipersfera di raggio unta-rio. L'inverso ed il prodotto di quaternioni untari sono anch'essi quaternioni unitari. Un quaternione unitario puo essere rappresentato al seguente modo:
q = cos + u sin (C.8)
dove u e un versore nello spazio tridimensionale. Vale la proprieta uu = 1. Si nota la somiglianza coi numeri complessi, infatti l'identita di Eulero per i numeri complessi, si generalizza coi quaternioni:
q = cos + u sin = eu (C.9)
dove l'esponenziale e valutato sostituendo simbolicamente u nello sviluppo in serie di ex, con uu = 1. Da questa identita, e possibile dinire la potenza
di un quaternione:
qt = eut = cos(t) + u sin(t) (C.10)
E' anche possibile denire il logaritmo di un quaternione, come:
log q = log eu = u (C.11)
E' molto importante notare che la non commutazione della moltipli-cazione dei quaternioni non permette le identita standard delle funzioni esponenziale e logaritmo: epeq 6= e(p+q), cosiccome log(p+q) 6= log(p)+log(q).
I quaternioni
C.2 Relazione tra quaternioni e rotazioni
Un quaternione unitario q = cos + u sin rappresenta la rotazione di un vettore tridimensionale v di un angolo 2 attorno all'asse u. Il vettore ruo-tato, rappresentato come quaternione, e R(v) = qvq. Per dimostrare cio e
necessario provare che R(v) e un vettore tridimensionale, che la lunghezza di v e invariata in seguito a R, che la trasformazione e lineare e che non e contemplata la componente di ri essione.
Per mostrare che R(v) e un vettore tridimensionale, si calcola la parte reale di questo quaternione:
w(R(v)) = [qvq+ (qvq)]=2
= [qvq+ qvq]=2
= q[(v + v)=2]q
= 0 perche v + v = 0.
Per dimostrare che R(v) mantiene invariata la lunghezza di v, si calcola la norma: N(R(v)) = N(qvq) = N(q)N(v)N(q) = N(q)N(v)N(q) = N(v) perche N(q) = 1.
Per dimostrare che R(v) e una trasformazione lineare, sia a uno scalare reale e v e w due vettori tridimensionali; risulta allora:
R(av + w) = q(av + w)q
= q(av)q+ q(w)q
= a(qvq) + (qwq)
= aR(v) + R(w)
Queste tre proprieta mostrano che R(v) e una trasformazione ortonor-male. Tali trasformazioni includono le rotazioni e le ri essioni.
Si considera ora il caso di R come una funzione di q per un vettore v costante. La funzione R(v) = qvq e continua in q e, per ogni q e una
tra-sformazione lineare con determinante D(q), anch'esso lineare in q. Quindi, per limq!1R(q) = R(1) = I (dove I e la funzione identita e il limite e
calco-lato lungo un qualsiasi cammino di quaternioni che tendano al quaternione 1) e limq!1D(q) = D(1) = 1. Per continuita D(q) e identicamente 1 e R(q)
non ammette la ri essione.
Si dimostra ora che R(q) e una rotazione di un angolo 2 e che l'asse di rotazione e u. Per vedere che u e un versore di un asse di rotazione e necessario dimostrare esso rimane invariato con la rotazione. Ricordando che uu = 1, ne risulta che uuu = u e quindi:
R(u) = quq
= (cos + u sin )u(cos u sin ) = (cos )2u (sin ))2uuu
= (cos )2u (sin ))2( u)
= u
Per dimostrare che l'angolo di rotazione e 2, siano u, v e w una terna levogira di vettori ortonormali, tali che uv = uw = v w = 0 e uv = w, v w = u e w u = v. Il vettore v e ruotato di un angolo nel vettore qvq, cosicche v(qvq) = cos(). Usando l'equazione C.7, con v = v , per
quaternioni unitari a parte reale nulla, risulta (si indica con W () l'operatore che retituisce la parte reale del quaternione):
cos() = v (qvq)
= W (vqvq)
= W [( v(cos + u sin )v(cos u sin )] = W [( v cos vu sin )(v cos vu sin )]
= W [ vv(cos )2+ vvu(sin cos ) vuv(sin cos ) + vuvu(sin )2]
= W [(cos )2 (sin )2 (u + vuv) sin cos
I quaternioni risulta:
cos() = W [(cos )2 (sin )2 (u + vuv) sin cos
= W [(cos )2 (sin )2 u(2 sin cos )]
= W [(cos )2 (sin )2]
= cos(2) e l'angolo di rotazione = 2.
E' importante notare che i quaternioni q e q rqpprensentano la stessa rotazione, dato che ( q)v( q) = qvq.
C.3 Conversioni tra quaternioni e matrici di
rotazione
Per questioni di spazio, in questa sezione riportiamo solo i risultati principali, mentre le dimostrazioni con tutti i passaggi possono essere trovati in [4].
C.3.1 Da quaternione a matrice di traformazione
Dato un quaternione q = (w; x; y; z), la sua matrice di trasformazione T associata e: T = 0 B B B B @
1 2(y2 + z2) 2xy 2wx 2wy + 2xz 0
2xy + 2wz 1 2(x2+ z2) 2wx + 2yz 0 2wy + 2xz 2wx + 2yx 1 2(x2+ y2) 0 0 0 0 1 1 C C C C A
C.3.2 Da matrice di tasformazione a quaternione
L'algoritmo valido, con le relative eccezioni, e riportato in [25] ed e quello implementato in KSS. Di seguito, si riporta il passo principale (tratto da [4]). Data la matrice T nella forma di cui sopra, si possono ricavare i parametri
di q come: tr(T ) = T11+ T22+ T33+ T44 w = 1 2 p tr(T ) x = T32 T23 4w y = T13 T31 4w z = T21 T12 4w
C.4 Interpolazione lineare sferica
I quaternioni deniscono un orientamento e l'idea di interpolare linearmente tra due quaternioni q0 e q1, visti come vettori in 4D sull'ipersfera unitaria
separati da un angolo , e di trovare una relazione del tipo: q(t) = c0(t)q0 + c1(t)q1
dove c0 e c1 sono funzioni reali di t per 0 t 1.
La quantita q(t) deve essere un quaternione unitario, per cui: 1 = q(t) q(t) = c0(t)2+ 2c0(t)c1(t) cos() + c1(t)2
Questa equazione e quella di un'ellisse che puo essere fattorizzata per ottenere le espressioni analitiche per c0 e c1. Un'altra via piu semplice e
quella che segue. Mentre t varia tra 0 e 1, il quaternione q(t) deve variare uniformemente nell'arco di cerchio che unisce q0 e q1. Quindi, l'angolo tra
q(t) e q0 e cos(t) e l'angolo tra q(t) e q1 e cos((1 t)). Il prodotto scalare
tra q(t) e q0 ne fornisce la parte reale, che vale:
cos(t) = c0(t) + cos()c1(t)
e il prodotto scalare tra q(t) e q1:
cos((1 t)) = c1(t) + cos()c0(t)
Si hanno quindi due equazioni in due incognite, la cui soluzione fornisce c0 e c1. Grazie a questi, l'espressione nale per il quaterione interpolato q(t),
I quaternioni
che si indica con Slerp(q0; q1; t)1, risulta:
q(t) = Slerp(q0; q1; t) = q0sin((1 t)) + qsin 1sin(t) (C.12)
E' da notarsi che questa espressione non e denita per = 0, ma per ovviare a questo inconveniente e semplice rimaneggiarla per passare ad un'e-spressione contenente termini nella forma sin
, per i quali si ha lim!0 sin =
1.
Esistono anche altre forme d'interpolazione per i quaternioni piu avanzate, quali la cubica e la spline. Queste non sono contemplate in questo lavoro, ma si possono trovare in [4].
Tutte queste proprieta dei quaternioni sono dichiarate ed implementate nella classe Quaternion di KSS (cap. 5).