1
Computer Graphics
Marco Tarini Università dell’Insubria
Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2011/12
Mirco Lezione:
Mirco Lezione: Mirco Lezione:
Mirco Lezione: rotazioni in R 3
Reminder
• Tutte e sole le isometrie (trasf. rigide)
= roto-traslazioni
= rotazioni (*) + traslazioni
• Rotazioni (*) : – quante possibili?
– come rappresentarle (internamente)?
(*) generiche = attorno ad assi passanti per l’origine
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazioni in R3: quante possibili?
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a R0R0
R0R0
R1 R1 R1 R1
R2R2 R2R2
R3R3 R3R3
R4 R4 R4 R4
R5 R5 R5 R5
R6R6 R6R6
R7 R7 R7 R7
R8 R8 R8 R8
R9 R9 R9 R9
RRR R10101010
R11 R11R11 R11
R12 R12R12 R12
R13R13R13 R13
etc etc
Rotazioni in R3: quante possibili?
R0 R0R0 R0
(e ovviamente includono l’identità)
Reppresentazioni possibili per rotazioni
• Buone (o meno) per:
– coincisione
• quanto sono prolisse?
– facilità di applicazione
• quanto è oneroso applicare la rot ad uno (o ventimila) punti / vettori?
– interpolabilità
• è possibile/facile trovare un’inerpolazione fra N rotazioni date?
• quanto è “buono” il risultato – combinabilità
• è facile trovare la risultante di N rotazioni date, eseguite in successione?
– invertibilità
• è facile trovare l’inversa?
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Per paragone:
reppresentazione interna delle traslazioni
• Banale:
vettore di displacement (tre float)!
– perfetta secondo tutti i criteri (verificare!)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
2
Reppresentazioni possibili per rotazioni
• Molte possibili,
con vantaggi e svantaggi diversi
• Tutte molto diffuse ed usate
• Modi per passare da una rappr. all’altra?
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Perché è utile interpolare rotazioni:
esempio: animazioni
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
tempo 100
tempo 200 tempo 150
R 1
R 2
R i ?
Perché è utile cumulare rotazioni:
esempio: scenegraph R c
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
R 0
R 1 R 2
R 3 R 4 R 5 R 6
“ R
3seguito da
R
0”
Reppresentazioni principali delle rotazioni
• Matrici 3x3
• Angoli di Eulero
• Asse + angolo
• Quaternioni
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Modo 1: matrice 3x3 (9 floats)
• (sottomatrice 3x3 della matrice di rot 4x4)
• come sappiamo, R ortonormale con det = 1
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
R 0 0 0
1 0 0 0
Modo 1: matrice 3x3 (9 floats)
• Prolissa (9 numeri invece di 3)
• Abb. facile da appliare (molt matrice-vettore)
– come sappiamo, cumulabile con qualunque altra trasf. affine
• Abb. facile da cumulare (molt matrice-matrice)
• Facilissima da invertire (trasposiz matrice)
• Problematica da interpolare:
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
R 0 0
k + h
R 1 1 = M in genere NON
di rotazione (non ortonormale)
perché?
3
Modo 2: angoli di eulero (3 floats)
• Qualunque rotazione (*) può essere espressa come:
– rotazione lungo asse X (di α gradi), seguita da:
– rotazione lungo asse Y (di β gradi), seguita da:
– rotazione lungo asse Z (di γ gradi) :
• Angoli α β γ :
“angoli di Eulero” di quella rotazione
– (quindi: le “coordinate” di quella rotaz)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
oridine (X-Y-Z) arbitrariamente scelto, (ma 1 volta x tutte)
Modo 2: angoli di eulero (3 floats)
• In linguaggio nautico / areonautico:
angoli di “rollio, beccheggio, imbardata”
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
rollio
( roll ) beccheggio
( pitch ) imbardata ( yaw )
Modo 2: angoli di eulero (3 floats)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• Implementaz.
fisica:
“mappamondo a tre assi”
Modo 2: angoli di eulero (3 floats)
• Coincisione: perfect!
• Da applicare: facilino
– (se a molti punti, meglio passare a matrice)
• Da interpolare: possibile…
– intrerpolaz dei tre angoli – (occhio ad interpolare angoli:
ricordarsi equivalenza angoli: α = α +360 (k) )
…ma risultati non sempre intuitivi)
• Da cumulare e invertire: problematico…
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
perché sommare e invertire gli angoli non funziona?
da: angoli di eulero a: matrice 3x3
• Facile!
• Il viceversa?
– (solo a suon di conti e funz trigon. inverse)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
( ) ( ) ( ) γ y β x α
z R R
R
M = ⋅ ⋅
Modo 3: asse e angolo
• Qualunque rotazione (*) data può essere espressa come:
– una (sola!) rotazione (di un angolo angolo angolo angolo ) attorno ad un asse asse asse asse
• Angolo: Angolo: Angolo: Angolo: uno scalare (1 float)
• Asse: Asse: Asse: Asse: un vettore normale (3 float) – (asse passante per l’origine)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
opportunamente
scelti
4
Modo 3: asse e angolo
• Coincisione: molto buono
• Interpolazione: ottimo!
– interpolare asse, intrerpolare angolo (nb: rinormalizzare asse!)
• Applicare: male
– modo migliore: passare a matrice 3x3 (o a quaternione)
• Cumulare: male
• Invertire: facilissimo
– (invertire angolo oppure asse)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Modo 3: asse e angolo: variante
• asse: v (vett normale, |v | = 1)
• angolo: α (scalare)
• rappresentarli internamente come 1 solo vett: v’ (3 float in tutto)
v’ = α v
• angolo α = |v’ |
• asse v = v’ / |v’ |
• (nota: se angolo = 0, asse si perde… infatti non conta)
• Più coinciso, ma per il resto equivalente
• (comune es. in fisica)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
da: asse e angolo a: matrice 3x3
• esercizio!
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Modo 4: “quaternioni” (4 float)
• Solo alcuni cenni:
– analogo (in 4D) dei numeri complessi (in 2D) – struttura simile ad asse + angolo:
q = ( asse x , asse y , asse z , cos( angolo / 2) )
| q | = 1
– teoria molto elegante e solida – un altro “vec4” molto utile!
– storia:
• roba di mezz’800!
• cross e dot products emergono dalla loro teoria!
• quasi nati per lo scopo (rappresentare rotazioni)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Modo 4: “quaternioni” (4 float)
• Coincisione: quasi perfetto
• Cumulare: facillimo ;)
• Invertire: facillimo ;)
• Interpolare: facillimo ;) e best results!
• Applicazione diretta: facillimo ;)
– (ma, per cumulare con altre trasformazioni, meglio passare a forma matriciale cmq)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h I c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a