Classi utili
di trasformazioni
Isometrie (rototraslazione)
“Mantengono la magnitudine”
Rotaz + Traslaz
Similitudini (trasformaz. conformali)
“Mantengono gli angoli”
Rotaz + Traslaz + Scaling uniforme
Lineari (trasformaz. affini)
) ( )
( )
( v 0 v 1 f v 0 f v 1
f α + β = α + β
Nota:
sono chiuse rispetto a combinazione
affini similit.
isom.
Classi utili
di trasformazioni
Isometrie (rototraslazione)
“Mantengono la magnitudine”
Rotaz + Traslaz
Similitudini (trasformaz. conformali)
“Mantengono gli angoli”
Rotaz + Traslaz + Scaling uniforme
Lineari (trasformaz. affini)
) ( )
( )
( v 0 v 1 f v 0 f v 1
f α + β = α + β
Demo in 2D
Passaggio preliminare:
Coordinate omogenee
= 1
3 2 1
α α α p
= 0
3 2 1
δ δ δ a
Vettori posizione
Vettori direzione
1 0
La 4ta cordinata “omogenea”
La coordinata w
Trasformazioni Affini
• Si possono esprimere come moltiplicazione con matrice
sempre
=
1 1 0 0 0 1
3 2 1
34 33 32 31
24 23 22 21
14 13 12 11
3 2 1
γ γ γ
α α α α
α α α α
α α α α
γ γ γ f
coordinate affini punto di partenza
= 1
3 2 1
δ δ δ
coordinate affini punto di arrivo
conta solo questo
Trasformazioni Affini
• Caso vettori “direzione”
sempre
=
1 1 0 0 0 1
3 2 1
34 33 32 31
24 23 22 21
14 13 12 11
3 2 1
γ γ γ
α α α α
α α α α
α α α α
γ γ γ f
coordinate affini vettore di partenza
= 1
3 2 1
δ δ δ
coordinate affini vettore di arrivo 0
0 0
0 0 0 0 0 ... ... ... ... 0 0 0 0
Esempio: trasformazione di traslazione rigida
+
=
′
′
′
0 1 1
z y x
z y x z
y x
α α α
=
1 1 0 0 0
1 0 0
0 1 0
0 0 1
1
z y x
z y x f
z y x
α α α
posso riscriverla come:
e cioè:
+ + +
=
1 1
z y x
z y x z
y x f
α α α
vettore di traslazione
Trasformazione di Traslazione rigida
l'inversa è ovviamente:
=
1 0 0 0
1 0 0
0 1 0
0 0 1 ) , , (
z y x
z y
x α
α α α
α T α
−
−
−
=
−
−
−
=
−
1 0 0 0
1 0 0
0 1 0
0 0 1 ) , , ( ) , ,
1 (
z y x
z y x z
y
x α
α α α
α α α
α
α T
T
matrice di
traslazione:
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Traslazione rigida
cosa succede se la applico ad un vettore ?
=
1 1 0 0 0
1 0 0
0 1 0
0 0 1
0
z y x z
y x f
z y x
α α α
0 0 0
0 0 0 0 0
= 0 z y x
) (γ S
matrice di scaling matrice di scaling matrice di scaling matrice di scaling
Trasformazione di Scalatura uniforme
x y
x y
=
1 1
z y x z
y x f
γ γ γ
=
1 1 0 0 0
0 0
0
0 0 0
0 0 0
1
z y x z
y x f
γ
γ
γ
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Scalatura generica
x y
x y
=
1 1
z y x z
y x f
z y x
γ γ γ
) , ,
( γ x γ y γ z S
matrice di scaling matrice di scaling matrice di scaling matrice di scaling
=
1 1 0 0 0
0 0
0
0 0 0
0 0 0
1
z y x z
y x f
z y x
γ γ γ
inversa?
Trasformazione di Scalatura generica
x y
x y
nota: la scalatura applicata ai punti
"scala" anche la distanza dall'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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Scalatura generica
• Osservazioni :
– Fattori di scala inferiori a 1 avvicinano l’oggetto al punto fisso di riferimento (origine)
– Fattori di scala maggiori di 1 lo allontanano – Se s x ≠ s y o s y ≠ s z le proporzioni dell’oggetto non
sono mantenute (scalatura non uniforme, o anisotropica)
– Se s x = s y = s z le proporzioni sono mantenute e si ha una scalatura uniforme (o isotropica)
Shearing
• Lo spostamento proporzionale alla pos y
=
=
′
=
′ +
=
′
1 0 0 0
0 1 0 0
0 0 1 0
0 0 cot 1 ) (
cot
θ θ
θ
H xy
z z
y y
y
x
x
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione attorno all'asse z
(x’,y’)
(x,y)
x y
z
α ρ
α ρ
sin cos
=
= y x
partenza:
) sin(
) cos(
β α ρ
β α ρ
+
′ =
+
′ = y
arrivo: x
ρ α
β
β β
β β
cos sin
sin cos
y x
y x
+
=
−
= β α ρ β α ρ
β α ρ β α ρ
cos sin sin
cos
sin sin cos
cos
+
=
−
=
Rotazione attorno all'asse z
(x’,y’)
(x,y)
x y
z
ρ
β β
β β
cos sin
'
sin cos
y x
y
y x
x
+
=
−
′ =
=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin - cos )
( β β
β β
Z θ R
= +
=
′
′
′
1 cos sin
sin - cos
1 ) ( 1
z y x
y x
z y x z R
y x
Z
β β
β β
β α
β
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione attorno all'asse x, y, o z
=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin - cos )
( θ θ
θ θ
Z θ R
=
1 0 0
0
0 cos sin
0
0 sin - cos 0
0 0 0
1 )
( θ θ
θ θ
X θ R
=
1 0 0 0
0 cos 0 sin -
0 0 1 0
0 sin 0 cos )
( θ θ
θ θ
Y θ R
e le inverse?
T
1 ( ) ( )
)
( θ θ θ
X X
X R R
R − = − =
Rotazioni generiche
• Una rotazione generica è definita da:
– angolo u, – asse v
– punto di applicazione p f
• come si fa?
da XKCD
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
http://xkcd.com/184/
Rotazione intorno ad un asse parallelo all'asse z
x y
z x
y
z
x y
traslazione T -1
rotazione R x
y
traslazione T
1
2
3
1. Porto il centro di rot nell'origine 2. Ruoto
3. Rimetto a posto
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione intorno ad un asse parallelo all'asse z
x y
z x
y
z
f( p )
=
T ( R ( T -1 p ) )
x y
traslazione T -1
rotazione R x
y
traslazione T
1
2
3
Composizione di trasformazioni
• Moltiplicazione matrici (vettori) ha la propretà associativa
f(p) = T ( R ( T -1 p ) )
= (T R T -1 ) p
una matrice M 4x4 che fa tutto.
• considerazioni sull'efficienza
• cosa possiamo dire sulla forma di M ?
• cosa succede se moltiplichiamo un vettore per M ?
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Punti VS vettori
x y
z
x y
z
M
p p p p
M( p p p p ) v
v v
v M( v v v v )
p p p
p = ( * , * , * , 1 ) = ( * , * , * , 1 ) = ( * , * , * , 1 ) = ( * , * , * , 1 ) punto all'angolo della casa (punto) (punto) (punto) (punto) v
v v
v = ( * , * , * , 0 ) = ( * , * , * , 0 ) = ( * , * , * , 0 ) = ( * , * , * , 0 ) velocità vettoriale del fumo (vettore) (vettore) (vettore) (vettore)
Ripassino
• Attenzione all'inversione: (AB) -1 = B -1 A -1
• Associativa si, ma commutativa no!
AB ≠ BA
• previsione:
determinare il corretto ordine delle trasformazioni non sarà intuitivo
x y
x y
RT TR
Classi utili
di trasformazioni
Isometrie (rototraslazione)
“Mantengono la magnitudine”
Rotaz + Traslaz
Similitudini (trasformaz. conformali)
“Mantengono gli angoli”
Rotaz + Traslaz + Scaling uniforme
Lineari (trasformaz. affini)
) ( )
( )
( v 0 v 1 f v 0 f v 1
f α + β = α + β
Come rappresento le rotazioni in 3D?
Cioè anche gli orientamenti
di un oggetto nello spazio
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
Rotazioni in R3:
quante possibili?
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
etc etc
Rotazioni in R3:
quante possibili?
R0
(e ovviamente includono l’identità)
Reppresentazioni possibili per rotazioni
Buone (o meno) per:
compattezza
quanto sono prolisse in memoria?
facilità di applicazione
quanto è oneroso applicare 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à
Per paragone:
reppresentazione 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 ‧ G A M E - D E V
Reppresentazioni 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 ‧ G A M E - D E V
Perché è utile interpolare rotazioni:
esempio: animazioni
tempo 100
tempo 200 tempo 150
R 1
R 2
R i
?
Perché è utile cumulare rotazioni:
scenegraph
R c
R 0
R 1 R 2
R 3 R 4 R 5 R 6
“ R 3 seguito da
R 0 ”
Reppresentazioni principali delle rotazioni
Matrici 3x3
Angoli di Eulero
Asse + angolo
Quaternioni
Modo 1: matrice 3x3 (9 floats)
(sottomatrice 3x3 della matrice di rot 4x4)
come sappiamo, R ortonormale con det = 1
R 0 0 0
1
0 0 0
Modo 1: matrice 3x3 (9 floats)
Prolissa (9 numeri invece di 3)
Abb. facile da applicare (molt matrice-vettore)