+ All Categories
Home > Documents > Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Date post: 02-May-2015
Category:
Upload: tonio-simona
View: 217 times
Download: 3 times
Share this document with a friend
42
Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008
Transcript
Page 1: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Quaternioni

Daniele Marini

Corso Di Programmazione Grafica aa2007/2008

Page 2: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 2

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

Page 3: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 3

• 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, r)=

• abbiamo perso l’informazione relativa all’angolo , un grado di libertà, non possiamo più ruotare attorno a z (roll)€

cosrcosh− sin rsinh 0 cosrsinh+ sin rcosh

sin rcosh+ cosrsinh 0 sin rsinh− cosrcosh

0 1 0

⎜ ⎜ ⎜

⎟ ⎟ ⎟

Page 4: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 4

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

Page 5: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 5

• 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

Page 6: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 6

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

Page 7: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 7

Specificare le rotazioni

• Una matrice di rotazione generica dipende da 9 parametri

• una rotazione richiede un’asse di rotazione n e un angolo : 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

Page 8: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 8

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

Page 9: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 9

rRr

n

V

il vettore r può essere scomposto in una componente parallela a n e in una ortogonale:r||=(n.r) xnLa componente ortogonale si trova per differenza dal vettore r:rL=r - (n.r) xnla 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:

r||

rL

RrL = (cosθ)rL+ (sinθ)V

quindi :

Rr = Rr + RrL

= Rr + (cosθ)rL+ (sinθ)V

= n.r × n + (cosθ)(r − n.r × n) + (sinθ)n × r

= (cosθ)r + (1− cosθ)n(n.r) + (sinθ)n × r

RrL

Page 10: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 10

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

Page 11: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

I quaternioni

Page 12: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 12

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}.

Page 13: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 13

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

Page 14: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 14

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    y= r sin  ed, equivalentemente, le componenti r e di un numero complesso in coordinate polari si convertono in forma cartesiana con le due equazioni:

r = x 2 + y 2

θ = arctany

x

Page 15: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 15

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:

Le formule di Eulero inverse permettono di ottenere seno e coseno dalla rappresentazione esponenziale di un numero complesso:

 

La coppia di valori (cos  sin rappresenta un qualunque punto su un cerchio di raggio unitario centrato nell'origine, al variare di ; perciò per individuare qualsiasi punto nel piano è sufficiente moltiplicare la forma esponenziale per il modulo r:

e iθ = cosθ + isinθ

cosθ =e iθ + e−iθ

2

sinθ =e iθ − e−iθ

2i

z = re iθ = rcosθ + irsinθ

Page 16: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 16

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:         z1 . z2 =r1 ei r2  ei  = r1 . r2 ei(

divisione:        z1 / z2 =r1 ei r2  ei  = r1 / r2 ei(

 

Page 17: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 17

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

Page 18: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 18

• 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

Page 19: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 19

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)

Page 20: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 20

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)

Page 21: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 21

Definizioni

Page 22: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 22

Proprietà 1

Page 23: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 23

Proprietà 2

Page 24: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 24

Proprietà 3

Page 25: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 25

• 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)

Page 26: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 26

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’=(ss’-vv’, vxv’ +sv’ + s’v)), esempio:

q1=(<0,0,1>,2) q2=(<1,0,0>,1)q1q2=(2-0, <0,1,0>+2<1,0,0>+<0,0,1>)=(<2,1,1>,2)

q2q1=(2-0, <0,-1,0>+<0,0,1>+2<1,0,0>)=(<2,-1,1>,2)

Page 27: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 27

La rotazione con quaternioni• 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 , sin ncon n unitario e sostituendo si ha:

rRr

n

Vr||

rLRrL

Rq(p)=(0,(cos2 -sin2 )r+2 sin2n(n.r)+2 cossinnxr))=

(0, rcos2 +(1- cos2n(n.r)+sin2nxr))

Page 28: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 28

• confrontiamo la:(0, rcos2 +(1- cos2n(n.r)+sin2nxr))

• con l’equazione ricavata prima:

• a meno del coefficiente 2 sono identiche• la rotazione di un vettore r di (n) si può quindi

attuare:• passando allo spazio dei quaternioni• rappresentando la rotazione con un quaternione unitario

q=(cos , sin n• applicando l’operatore q(.)q-1 al quaternione (0,r)

• la rotazione si parametrizza quindi con i 4 parametri: cos , sin nx, sin ny, sin nz

(cosθ)r + (1− cosθ)n(n.r) + (sinθ)n × r

Page 29: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 29

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(, , )

• 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

Page 30: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 30

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(, , ) è rappresentata dal prodotto dei due quaternioni (0,(0,1,0))(0,(0,0,1))=(0,(1,0,0))

• Il risultato è uguale

Page 31: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 31

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?

Page 32: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 32

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

Page 33: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 33

• per ruotare un vettore p di un angolo con il quaternione q usiamo l’operatore: q(0,p)q-1

• dove q=(cos(sinn)=(s,(x,y,z)) • si può dimostrare che questo corrisponde ad

applicare al vettore la matrice di rotazione:

M =

1− 2(y 2 + z2) 2xy − 2sz 2sy + 2xz 0

2xy + 2sz 1− 2(x 2 + z2) −2sx + 2yz 0

−2sy + 2xz 2sx + 2yz 1− 2(x 2 + y 2) 0

0 0 0 1

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Page 34: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 34

• la trasformazione inversa, dalla matrice al quaternione, consiste nel prendere una generica matrice:

• 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

M0,0 M0,1 M0,2 M0,3

M1,0 M1,1 M1,2 M1,3

M2,0 M2,1 M2,2 M2,3

M3,0 M3,1 M3,2 M3,3

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Page 35: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 35

• da queste equazioni si ricava:

s = ±1

2M0,0 + M1,1 + M2,2 + M3,3

e inoltre :

x =M2,1 − M1,2

4s

y =M0,2 − M2,0

4s

z =M1,0 − M0,1

4s

Page 36: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 36

Interpolazione lineare sferica SLERP

• 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.

Page 37: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 37

• una interpolazione lineare ingenua produce angoli diseguali e quindi una variazione di velocità, da qui la nozione di interpolazione sferica:

• 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 , e p forma con A un angolo . Deriviamo p con interpolazione sferica con l’equazione parametrica: p=A+B;

A Bp

Page 38: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 38

• p=A+B poiché:• |p|=1; A.B=cos()• A.p=cos()• ricaviamo: • p=Asin( -)/sin()+Bsin()/sin()

Page 39: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 39

• generalizzando in 4d l’interpolazione tra due quaternioni unitari q1 e q2 che formano l’angolo: q1.q2 = cos() si ha, considerando come parametro u (0<=u<=1):

slerp(q1,q2,u) = q1

sin((1− u)Ω)

sin(Ω)+ q2

sin(Ωu)

sin(Ω)

Page 40: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 40

• 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 o l’angolo 2. 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.

Page 41: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 41

• 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).

Page 42: Quaternioni Daniele Marini Corso Di Programmazione Grafica aa2007/2008.

Programmazione Grafica aa2007/2008 42

un po’ di link

• http://www.3dgamedev.com/articles/eulers_are_evil.htm

• http://www.gamedev.net/reference/articles/article1095.asp

• keyword per ricerca in rete: quaternion, euler angle


Recommended