Corso Di Programmazione Grafica
Quaternioni
Daniele Marini
Problema 1: “gimbal lock”
• blocco del giroscopio
• esprimiamo le rotazioni con gli angoli
di Eulero, tre angoli di rotazione
attorno agli assi coordinati (si pensi a
un velivolo, yaw (head), pitch, roll)
• implementiamo gli angoli di Eulero con
le matrici appena esaminate
2
• eseguiamo una rotazione di yaw di 90°
• eseguiamo una rotazione di pitch di 90°
• esprimiamo la matrice come funzione di tre
parametri E(h,p,r) [concatenazione di tre matrici
di rotazione Rz(h). Rx(p). Ry(r)] dopo la prima
trasformazione abbiamo E(h, /2, r)=
 cos r cosh sin r sinh 0 cos r sinh  sin r cosh


sin
r
cosh
cos
r
sinh
0
sin
r
sinh

cos
r
cosh




0
1
0


• abbiamo perso l’informazione relativa all’angolo
, un grado di libertà, non possiamo più ruotare
attorno
a z (roll)

3
Problema 2: Interpolare
rotazioni
• nella animazione si richiede di modificare la
posizione di un oggetto o della camera con
traslazioni e rotazioni
• interpolare traslazioni non pone problemi
• Anche la rotazione deve poter essere
espressa in forma parametrica per
semplificare il calcolo delle interpolazione
delle rotazioni
4
• Infatti:
– se incrementiamo di una piccola quantita’ un angolo
più volte nascono problemi di arrotondamento
– se abbiamo rotazione attorno a un solo asse nascono
irregolarità e movimenti a scatto
– se abbiamo più rotazioni, dopo un po’ di applicazioni
la matrice non è più ortogonale e la scena si deforma
– si può risolvere il problema “rinormalizzando” la matrice
a ogni passo
• comunque è una soluzione costosa
5
Una trackball virtuale
• Immaginate una trackball: la
rotazione della sfera controlla la
rotazione nel sistema.
• Con il mouse si può ricavare la
posizione equivalente sulla sfera
di raggio unitario con una
proiezione invertibile, noti x e z si
ricava y=(1-x2-y2)1/2
• La rotazione sulla sfera da P a Q si
svolge su un arco di cerchio, il cui
piano è individuato dai due
vettori su P e Q, con n normale a
questo piano
• La rotazione avviene dunque
attorno ad n
6
Specificare le rotazioni
• Una matrice di rotazione generica dipende
da 9 parametri
• una rotazione richiede un’asse di rotazione
n e un angolo q: 4 parametri (3 per il vettore,
1 per l’angolo)
• Abbiamo anche visto come considerare la
rotazione attorno a un asse generico come
cambiamento di riferimento
7
Specificare le rotazioni
• Un altro modo di considerare la
rotazione attorno a un asse generico:
– Vogliamo ruotare il vettore r attorno
all’asse n di un angolo q
8
rL
q
RrL
V
r
Rr
r||
n
il vettore r può essere scomposto in una componente parallela
a n e in una ortogonale:
r||=(n.r) xn
La componente ortogonale si trova per differenza dal vettore
r:
rL=r - (n.r) xn
la componente || resta invariata nella rotazione, varia solo la
componente L (rossa).
Definiamo un vettore V ortogonale a rL:
V=nx rL = nxr con cui possiamo esprimere il vettore ruotato
(rosso) in funzione di V:
RrL = (cos q )rL  (sin q )V
quindi :
Rr  Rr  RrL
 Rr  (cos q )rL  (sin q )V
 n.r  n  (cos q )(r  n.r  n)  (sin q )n  r
 (cos q )r  (1 cos q )n(n.r )  (sin q )n  r
9
Specificare le rotazioni
• Con questi metodi possiamo
specificare rotazioni generiche e
interpolare rotazioni
• Peccato che al momento sappiamo
specificare una rotazione solo con
matrici di Eulero
10
I quaternioni
Numeri complessi (richiami)
I numeri complessi sono una estensione dei numeri reali e sono
indispensabili per risolvere equazioni del tipo: z=(-1)1/2 . Adottando
il simbolo i per denotare la radice quadrata dell'unita negativa, la
soluzione a questa equazione diventa z = ± i.
Un numero complesso z è una coppia ordinata di numeri reali. Si
può quindi rappresentare un numero complesso con la notazione
z=(x,y)
dove x rappresenta la parte reale, denotata anche con Re{z}, mentre
y rappresenta la parte immaginaria, denotata anche conIm{z}.
12
Un numero complesso si può anche rappresentare nella forma
z=x+iy (nella teoria dei segnali si usa il simbolo j per la costante
immaginaria i). Questa forma di rappresentazione dei numeri
complessi viene anche chiamata "forma Cartesiana". I numeri
complessi possono anche essere pensati come punti del "piano
complesso", perciò i numeri complessi possono essere considerati
come un diverso modo con cui studiare la geometria analitica del
piano. Si usa anche la rappresentazione in coordinate polari
13
Per convertire un numero complesso dalla forma cartesiana a
quella polare si ricorre a proprietà trigonometriche e al teorema di
Pitagora; infatti ricordiamo che:
x = r cos q ; y= r sin q
ed, equivalentemente, le componenti r e q di un numero
complesso in coordinate polari si convertono in forma cartesiana
con le due equazioni:
r x y
2
2
y
q  arctan
x
14
La rappresentazione in forma polare più adeguata è basata sulla formula di
Eulero che permette di rappresentare un numero complesso come esponenziale
in base e in forma trigonometrica:
e iq  cos q  isin q
Le formule di Eulero inverse permettono di ottenere seno e coseno dalla
rappresentazione esponenziale di un numero complesso:
e iq  eiq
cosq 

2
e iq  eiq
sin q 
2i
La coppia di valori (cos q, sin q) rappresenta un qualunque punto su un
cerchio di raggio unitario centrato nell'origine, al variare di q ; perciò per
individuare qualsiasi punto nel piano è sufficiente moltiplicare la forma

esponenziale per il modulo r:
z  reiq  rcosq  irsin q
15
Sono definite numerose operazioni tra numeri complessi, in
particolare:
somma :
z1 + z2 =(x1 + iy1)+(x2 + iy2)=(x1+x2) + i(y1+y2)
sottrazione: z1 - z2 =(x1 + iy1)-(x2 + iy2)=(x1 -x2) + i(y1 -y2)
complesso coniugato: z* = (x + iy)* = (x - iy)
Le operazioni di prodotto e divisione sono più semplici nella
forma polare, ricordando le proprietà degli esponenziali:
prodotto:
divisione:
z1 . z2 =r1 eiq1 . r2 eiq2 = r1 . r2 ei(q1q2)
z1 / z2 =r1 eiq1 / r2 eiq2 = r1 / r2 ei(q1q2)
16
Quaternioni e rotazioni
• la rotazione di un vettore r di un angolo si può
esprimere con un operatore chiamato quaternione,
caratterizzato da 4 numeri reali
• abbiamo 4 gradi di libertà invece dei 9 elementi
della matrice, come per la rotazione attorno a un
asse generico
• useremo quaternioni unitari
• i quaternioni possono essere considerati come una
generalizzazione dei numeri complessi, con uno
scalare s come parte reale e un vettore v come
parte immaginaria
17
• denotiamo un quaternione q con:
q = s + xi + yj + zk
dove i,j,k sono i quaternioni unitari e
corrispondono ai vettori unitari degli assi
in un sistema vettoriale e hanno le
proprietà:
i2= j2= k2=ijk=-1; ij=k; ji=-k
• da queste proprietà ricaviamo le
operazioni di somma e moltiplicazione
• Questa definizione è dovuta a Hamilton
18
Quaternioni
• Una notazione più recente dovuta a Gibbs
vede il quaternione come composto da
una parte scalare s che corrisponde alla
parte reale di un numero immaginario, e da
una parte vettoriale v che corrisponde alla
parte immaginaria del numero complesso in
4 dimensioni: [s,v]
• La parte vettoriale complessa si esplicita
nella forma: v = (x,y,z)
19
Numeri e vettori reali come
quaternioni
• Secondo la notazione di Gibbs un
numero reale s si può scrivere come
quaternione la cui parte immaginaria
è nulla: (s,0)
• Mentre un vettore reale in R3 si può
scrivere come quaternione la cui parte
scalare è nulla: (0,v)
20
Definizioni
21
Proprietà 1
22
Proprietà 2
23
Proprietà 3
24
• La moltiplicazione ha un inverso:
basta verificare che q q* è la norma:
da cui qq-1=q-1q=1
•ricordiamo la moltiplicazione:
qq’=(ss’-vv’, vxv’ +sv’ + s’v)
25
Quaternioni unitari
• Se |q|=1 il quaternione è detto unitario
• L’insieme dei quaternioni unitari forma una sfera in uno spazio
a 4 dimensioni
• Si può dimostrare che se q=(v,s ) allora esiste un vettore v’ e un
angolo  tale che: q=(cos , v’sin )
• Se q è unitario allora q=(cos , sin  n) con n unitario
• i quaternioni non sono commutativi rispetto al
prodotto(ricordiamo: qq’=((vxv’ +sv’ + s’v), ss’-vv’), esempio:
q1=(<0,0,1>,2) q2=(<1,0,0>,1)
q1q2=(<0,1,0>+2<1,0,0>+<0,0,1>, 2-0 )=(<2,1,1>,2)
q2q1=(<0,-1,0>+<0,0,1>+2<1,0,0>, 2-0)=(<2,-1,1>,2)
26
La rotazione con
quaternioni
rL
q
RrL
V
r
Rr
r||
n
• r è definito dal quaternione p=(0,r)
• definiamo l’operatore Rq=q(.)q-1 con q
quaternione unitario (s,v)
• applicato a p l’operatore dà: qpq-1
• in forma esplicita:
• Rq(p)=(0,(s2-v.v)r+2v(v.r)+2s(vxr))
• ricordando che: se q è unitario allora
q=(cos q, sin q n) con n unitario e
sostituendo si ha:
Rq(p)=(0,(cos2q -sin2q )r+2 sin2q n(n.r)+2 cosqsinq(nxr))=
(0, rcos2q +(1- cos2q n(n.r)+sin2q(nxr))
27
• confrontiamo la:
(0, rcos2q +(1- cos2q n(n.r)+sin2q(nxr))
• con l’equazione ricavata prima:
(cos q )r  (1 cos q )n(n.r )  (sin q )n  r
• a meno del coefficiente 2 sono identiche
• la rotazione di un vettore r di (q,n) si può quindi
attuare:
• passando allo spazio dei quaternioni
• rappresentando la rotazione con un quaternione unitario
q=(cos q/2, sin q/2 n)
• applicando l’operatore q(.)q-1 al quaternione (0,r)
• la rotazione si parametrizza quindi con i 4
parametri: cos q/2, sin q/2 nx, sin q/2 ny, sin q/2 nz
28
ancora un esempio
• ruotiamo un oggetto di 180° attorno all’asse x con
la sequenza di rotazioni R(0,0,0), ... R(t,0,0), ...,
R(,0,0) con 0<=t<=1
• la seconda sequenza ruota attorno y, z : R(0,0,0), ...
R(0, t, t), ..., R(0, , )
• la posizione finale e’ identica, ma l’oggetto “twista”
nella seconda
• occorre controllare i 3 angoli di Eulero per
governare la sequenza desiderata
• da qui l’uso dei quaternioni
29
con i quaternioni
• la rotazione ottenuta con la sequenza R(0,0,0), ...
R(t,0,0), ..., R(,0,0) è rappresentata dal
quaternione (cos(/2), sin(/2)(1,0,0))=(0,(1,0,0))
• la rotazione ottenuta con la sequenza R(0,0,0), ...
R(0, t, t), ..., R(0, , ) è rappresentata dal
prodotto dei due quaternioni
(0,(0,1,0))(0,(0,0,1))=(0,(1,0,0))
• Il risultato è uguale
30
Interpolare
• una sequenza di rotazioni puo’ ora
essere attuata da una sequenza di
quaternioni
• la sequenza di matrici di rotazione
espresse con angoli di Eulero viene
trasformata in una sequenza di
quaternioni che danno origine a una
nuova sequenza di matrici di rotazione
• come?
31
Entrare e uscire dallo spazio
dei quaternioni
• data una matrice generale di
rotazione determinare il quaternione
corrispondente
• dato un quaternione determinare la
corrispondente matrice di rotazione
32
• per ruotare un vettore p di un angolo q con il
quaternione q usiamo l’operatore: q(0,p)q-1
• dove q=(cos(q/2),sin(q/2)n)=(s,(x,y,z))
• si può dimostrare che questo corrisponde ad
applicare al vettore la matrice di rotazione:
1 2(y 2  z 2 )
2xy  2sz
2sy  2xz

2
2
2xy

2sz
1
2(x

z
) 2sx  2yz

M
 2sy  2xz
2sx  2yz
1 2(x 2  y 2 )

0
0
0

0

0
0

1
33
• la trasformazione inversa, dalla matrice al quaternione,
consiste nel prendere una generica matrice:
 M 0,0

 M1,0
 M 2,0

 M 3,0
M 0,1
M 0,2
M1,1
M 2,1
M1,2
M 2,2
M 3,1
M 3,2
M 0,3 

M1,3 
M 2,3 

M 3,3 
• in cui M3,3=1; M0,3=M1,3=M2,3=M3,0=M3,1=M3,2=0
• altri vincoli sulla matrice sono:

– la somma
degli elementi diagonali è: 4-4(x2+y2+z2)
– il quaternione deve essere unitario, quindi:
– s2+ x2+y2+z2=1 da cui: 4-4(x2+y2+z2)=4-4(1- s2)=4 s2
34
• da queste equazioni si ricava:
1
M 0,0  M1,1  M 2,2  M 3,3
2
e inoltre :
M  M1,2
x  2,1
4s
M 0,2  M 2,0
y
4s
M1,0  M 0,1
z
4s
s
35
Interpolazione lineare sferica
SLERP
• SLERP: Spherical Linear Interpolation
• per interpolare tra due quaternioni
unitari determinando i quaternioni
intermedi che identificano le matrici di
rotazione ricordiamo che lo spazio dei
quaternioni unitari forma una ipersfera
nello spazio 4d, perciò tutti i
quaternioni interpolati giacciono sulla
sfera stessa.
36
• una interpolazione lineare ingenua produce angoli diseguali
e quindi una variazione di velocità, da qui la nozione di
interpolazione sferica:
p
A
q
B
W
• interpoliamo lungo una linea geodesica che ha gli esteremi
nei punti chiave
• in due dimensioni (per semplicità) i punti A,B sono separati
dall’angolo W, e p forma con A un angolo q. Deriviamo p
con interpolazione sferica con l’equazione parametrica:
p=aA+bB;
37
• p=aA+bB poiché:
• |p|=1; A.B=cos(W)
• A.p=cos(q)
• ricaviamo:
• p=Asin(W -q)/sin(W)+Bsin(q)/sin(W)
38
• generalizzando in 4d l’interpolazione
tra due quaternioni unitari q1 e q2 che
formano l’angolo: q1.q2 = cos(W) si ha,
considerando q come parametro u
(0<=u<=1):
sin((1 u)W)
sin( Wu)
slerp(q1,q2 ,u)  q1
 q2
sin( W)
sin( W)

39
• esistono due possibili archi geodesici che vanno
da q1 a q2 uno segue il percorso più breve,
l’altro il più lungo, e questo equivale a
interpolare lungo l’angolo W o l’angolo 2W.
Ciò consegue dal fatto che gli operatori q(.)q-1 e
(-q)(.)(-q)-1 producono il medesimo risultato
• per decidere quale percorso seguire occorre
valutare la grandezza della distanza tra i due
quaternioni e tra il primo e il secondo negato:
• Quindi calcolare (p-q).(p-q) e(p+q).(p+q) e
scegliere il minore, sostituendo, nel caso, q con q.
40
• L’interpolazione tra più di due posizioni
chiave produce geodesiche che
possono essere discontinue nella derivata
prima, il che dà luogo a movimento con
scatti.
• per ovviare si valuta la velocità angolare
e si suddividono gli intervalli per il
parametro in modo adeguato (più fitti
quando la velocità è maggiore).
41
un po’ di link
• http://www.gamedev.net/reference/articles/article
1095.asp
• keyword per ricerca in rete: quaternion, euler angle
42
Scarica

Quaternioni - Università degli Studi di Milano