• Non ci sono risultati.

Algebra di punti e vettori

N/A
N/A
Protected

Academic year: 2021

Condividi "Algebra di punti e vettori"

Copied!
40
0
0

Testo completo

(1)

Algebra dei vettori 2/2

Prodotto dot / inner / interno / scalare Prodotto cross / vettoriale

Algebra di punti e vettori

Differenza fra punto e punto = vettore

Somma punto + vettore = punto

(2)

Ripasso:

base vettoriale

Insieme di

nvettori

asse (qui: x,y,z )

Ogni vettore v esprimibile univoc.

come combinaz dei vettori asse

I pesi della combinaz sono le coord di v

y

x

z

Chiralità di un frame

Un sistema di riferimento ortogonale può essere sinistrorso o destrorso

sinistrorso destrorso

z y x× =

Ricordiamoci di usare la STESSA MANO per immaginare il prodotto cross

z y xcomunque!× =

(3)

Ripasso: sistema di

riferimento (geometric frame)

nvettori asse

+

1 punto origine

Ogni vettore v

comb lineare degli n

assi

Ogni punto p origine

+ comb. lin. assi

y

x

z o

(base vettoriale)

Trasformazioni spaziali

Punto

originale

Punto

trasformato

f

Vettore

originale

Vettore

trasformato

f

(4)

Trasformazioni spaziali

Funzioni

input: un punto (oppure un vettore) output: un punto (oppure un vettore) punti e vettori:

rappresentati da coordinate

trasformazioni:

“cambiano le coordinate”

nuove coords = funz( vecchie coords ) p

f f f

q

q = (p) v = (u)

f f

Trasformazioni spaziali:

intro

Concetto molto generale…

Parte di molte strutture dati:

nello scene graph (trasf. di modellazione) nelle animazioni cinematiche

nelle animazioni rigged (skeleton based)

Vengono usate in molti processi

nel rendering, dalla GPU (vertex shader!) trasformazione di mollezione, di vista, di proiezione trasformano geometria e normali delle mesh renderizzate nella modellazione, interattivamente, dall’artista

x deformare un’intero oggetto o una sua sottoparte

(5)

f

Es 1: trasformazione spaziale di modellazione

Spazio Oggetto

Spazio Mondo

p

f f f

q

Es 2: trasformazioni nel rendering

Spazio Oggetto

Spazio Mondo

Spazio Schermo Spazio

Vista

Trasforamzione di Modellazione

Trasforamzione di Vista

Trasforamzione di Proiezione e Viewport

(6)

z

Object Coordinates

Dare ad ogni oggetto il suo sistema di coordiante privato:

il suoObject Space;

y

y

y

y x

x

x

x

z

z

z

z

y

x

Es: scene graph

Mondo

T1 T2 T3 T4

(7)

Object Space (spazio oggetto)

spazio oggetto

1

spazio oggetto (“spazio macchina”)

origineodello spazio oggetto

x y

-1 2 3 -2

-3

assixe ydello spazio oggetto

1 2 3

-1 -2 -3

Object Coordinates

1.5

2.3 p = (1.5, 2.3)

coordinate dip in spazio oggetto

x y

spazio oggetto (“spazio macchina”)

(8)

Object Coordinates

1.5 2.3

p = (1.5, 2.3)

spazio oggetto (“spazio macchina”)

coordinate di p in spazio oggetto

x y

x y

spazio mondo

= (12.5, 8.1) 8.1

12.5

coordinate di p in spazio mondo

1 1

Object Coordinates

p = (1.5, 2.3)

spazio oggetto:

(“spazio macchina A”)

coordinate in spazio oggetto

x y

= (9.7, 4.2) 7.4

22.5

spazio oggetto:

(“spazio macchina B”) coordinate in spazio mondo

p = (1.5, 2.3)

= (22.5, 7.4)

9.7 1

1 4.2

spazio mondo

(9)

Classi utili

di trasformazioni spaziali

Isometrie

(rototraslazioni)

“Mantengono le distanze”

Rotaz+ Traslaz

Similitudini

(trasformaz. conformali)

“Mantengono gli angoli”

Rotaz+ Traslaz+ Scaling uniforme

Lineari

(trasformaz. affini)

) ( )

( )

(

v0 v1 f v0 f v1

f

α + β = α + β

Nota:

sono chiuse rispetto a combinazione

tr. affini similit.

isom.

Classi utili

di trasformazioni spaziali

Isometrie

(rototraslazioni)

“Mantengono le distanze”

Rotaz+ Traslaz

Similitudini

(trasformaz. conformali)

“Mantengono gli angoli”

Rotaz+ Traslaz+ Scaling uniforme

Lineari

(trasformaz. affini)

) ( )

( )

(

v0 v1 f v0 f v1

f

α + β = α + β

(10)

Rappr. punti e vettori in coord omogenee

POSIZIONI

punto p di coordinate cartesiane ( x , y , z ) coordiante omogenee di p : ( x , y , z , 1)

DIREZIONI / SPOSTAMENTI

vettore v di coordinate cartesiane ( x , y , z ) coordiante omogenee di v : ( x , y , z , 0)

PRELIMINARE

Trasformazioni affini

Definizioni equivalenti:

trasf esprimibili con moltiplicaz con matrice4x4 con ultima riga: 0,0,0,1

si moltiplica la matr il vett di coordinate omogenee cambio di frame

(di origine + sistema di assi catesiani) da: spazio di origine a: spazio di destinazione trasflineari: cioè t.c.

tasformazioni di un tetraedro in un tetraedro (in 3D) (in 2D: di un triangolo in un triangolo)

) ( )

( )

(

v0 v1 f v0 f v1

f

α + β = α + β

(11)

Trasformazioni affini:

cosa fanno

mantengono sempre:

rapporti fra volumi parallelisimo fra rette

non mantengono (in generale):

volumi, o aree, o angoli, o lunghezze o rapporti fra aree, o fra lunghezze

non includono:

defomazioni prospettiche

Trasformazioni affini:

cosa fanno

Rotazioni Traslazioni

(di punti – x le direzioni non ha senso)

Scalature

uniformi o non

Skewing

… e combinazioni

(infatti includono tutte le isometrie)

infatti la classe è chiusa rispetto a combinazioni…

(basta moltiplicare le matrici!)

(12)

Trasformazioni affini

(nelle GUI)

: come si possono specificare

nota: questi controlli familiari (piu’ la traslazione, effettuata con drag-and-drop) sono sufficienti a specificare ogni possibile trasf affine in 2D

[DEMO]

Trasformazioni affini

(nelle GUI)

: come si possono specificare

Controllers(concetto generale)

aka:handles(maniglie)

aka (specie in 3D): glifi(glyphs) o gizmos

Elementi delle GUI per specificare… cose

Esempio: handles per specificare le trasf affini in 2D:

rotaz

skew orizz

skew verticale scalatura

(uniforme)

scalatura (orizz) scalatura

(vert)

(13)

Trasformazioni Affini

• Si possono tutte esprimere come una moltiplicazione con 1 matrice 4x4

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

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

(14)

Esempio di riscrittura come matrice 4x4:

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:

(15)

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 z y x

) (γ S

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 γ

γ γ

(16)

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









=









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

(17)

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

θ θ

θ

Hxy

z z

y y

y x x

(18)

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

β β

β β

β

α

β

(19)

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 )

( θ θ

θ θ θ

RX





=

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?

(20)

da XKCD

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

(21)

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 ?

(22)

Punti VS vettori

x y

z x

y

z

M

p M( p)

v M( v)

p = ( * , * , * , 1 ) punto all'angolo della casa (punto) v = ( * , * , * , 0 ) velocità vettoriale del fumo (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

(23)

1 trasformazione affine = 1 matrice 4x4

Caso generale :

Memorizzabile anche come:

Mat3x3 + Vec3

M 0 0

0 1 0 0 0

t

vettore 3

sottomatrice 3x3 Rotazione + Scalatura + Skewing

Traslazione

Come rappresento le trasformazioni

Per esempio, con una matr 4x4:

class Transform { // fields:

Mat4x4 m;

// methods:

Vec4 apply( Vec4 p ); // p in coord omogenee Vec3 applyToPoint( Vec3 p ); // p in coord cartes.

Vec3 applyToVector( Vec3 v ); // p in coord cartes.

}

(24)

Come rappresento le trasformazioni

Oppure, per es, con matr3x3 + vett traslazione:

class Transform { // fields:

Mat3x3 m; // rotaz, skew, scale Vec3 t; // translaz

// methods:

Vec3 applyToPoint( Vec3 p ){

return m * p + t;

}

Vec3 applyToVector( Vec3 v ){

return m * p;

}

}

Reppresentazioni possibili per trasformazioni: criteri

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 trasformaz date?

quanto è “buono” il risultato combinabilità

è facile trovare la risultante di N trasformaz date, eseguite in successione?

invertibilità

è facile trovare la trasformaz inversa?

intuitività

quanto è difficile spiegarla ai modellatori / editori di scene / etc

(25)

Perché è utile interpolare trasformaz:

esempio: animazioni

tempo 100

tempo 200 tempo 150

T 1

T 2 T i

?

Perché è utile cumulare trasformaz:

esempio: scenegraph

spazio mondo (globale) spazio oggetto ruota 1 spazio oggetto automobile

(26)

Perché è utile cumulare trasformaz:

esempio: scenegraph

T

c

T0

T1 T2

T3

T4 T5 T6

T3

seguito da T0

NOTA:

cumulazione di rotazioni NONcommuta!!! (in 3D)

Perché è utile invertire trasformaz:

switch between spaces

T T

-1

spazio mondo spazio oggetto A

(27)

Come rappresento le trasformazioni

Quindi servono metodi come:

class Transform { // fields:

// methods:

Vec3 applyToPoint( Vec3 p );

Vec3 applyToVector( Vec3 v );

Transform cumulateWith( Transform& t );

Transform inverse();

Transform interpolateWith( Transform& t , float k );

}

Sinonimi comuni al posto di interpolate:

blend, mix, lerp

Classi utili

di trasformazioni spaziali

Isometrie

(rototraslazioni)

“Mantengono le distanze”

Rotaz+ Traslaz

Similitudini

(trasformaz. conformali)

“Mantengono gli angoli”

Rotaz+ Traslaz+ Scaling uniforme

Lineari

(trasformaz. affini)

) ( )

( )

(

v0 v1 f v0 f v1

f

α + β = α + β

(28)

Un’altra classe di trasf (senza nome)

spesso usata nei Game Engines

Le trasformazioni ottenibili combinando:

Rotazioni Traslazioni

Scalature… ma anche NON uniformi

(un altro sottoinsieme delle trasformazioni affini) Utile in pratica

facile da specificare, abb. flessibile e intuitiva Bruttina in teoria

non e’ chiusa rispetto a combinazione:-O :-(

(e non mantiene… angoli, nulla)

Come rappresento le trasf.

isometriche / conformali

Sotto problema: come rappresento le rotazioni

class Transform { // fields:

Rotation r;

float s; // scale Vec3 t; // translation // methods: …

}

class Rotation { // fields:

Mat3x3 m;

// methods: … }

Non

necessariamente cosi’!

stiamo per vedere valide alternative

(29)

Osservazione

se la mia trasformazione è rappresentata da

rotazione + traslazione

+ (eventualmente) scalatura

allora la posso agevolmente

applicare (a punti e vettori)

cumulare(con altre trasformazioni)

invertire interpolare

a patto di saperlo fare con le rotazioni !

Osservazione

Esempio: applicazione a punti e vettori

class Transform { // fields:

Rotation r;

Vec3 t; // translation

Transform applyToPoint( Vec3 p ){

return r.apply( p ) + t ; }

Transform applyToVector( Vec3 v ){

return r.apply( v ) ; }

}

(30)

Osservazione

Esempio: interpolare transf

class Transform { // fields:

Rotation r;

Vec3 t; // translation

Transform mixWith( Transform b , float k ){

Transform result;

result.r = this.r.blendWith( b.r , k );

result.t = this.t * k + b.t * (1-k);

return result;

} }

Osservazione

Esempio: inversione

class Transform { // fields:

Rotation r;

Vec3 t; // translation Transform inverse(){

Transform result;

result.r = this.r.inverse();

result.t = result.r.apply( -this.t );

return result;

} }

NB!

(perchè?)

(31)

Osservazione

Esempio: cumulare trassf

class Transform { // fields:

Rotation r;

Vec3 t; // translation

Transform cumulateWith( Transform b ){

Transform result;

result.r = this.r.cumulateWith( b.r );

result.t = b.r.apply( this.t ) + b.t;

return result;

} }

NB!

(perchè?)

Come rappresento

(internamente)

una rotazione in 3D?

cioè anche gli

orientamenti

di un oggetto nello

spazio

(32)

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

(33)

Per paragone:

reppresentaz. delle traslazioni in 3D

Banale:

vettore di displacement (tre float)!

perfetta secondo tutti i criteri (verificare!)

Per paragone:

reppr. delle rotazioni in 2D

Banale: un angolo (un float)

buona secondo tutti i criteri (verificare per es.!)

(unica scelta: degrees or radiants?)

caveat: interpolazione!

«pick the shortest route»

mix( 25°, 335° , 0.5 ) = 0 (ma, still easy)

[0,360) [0,2·Pi)

25°

335° = -25°

(34)

Per paragone:

reppr. delle rotazioni in 2D

Passaggio angolo vettore

x y

α

Per paragone:

reppr. delle rotazioni in 2D

Passaggio angolo  vettore

x y

α

pro tip: use atan2

(35)

Reppresentazioni per rotazioni (in 3D)

Molte possibili,

vanno più o meno bene coi vari criteri

Tutte molto diffuse ed usate

Modi per passare da una rappr. all’altra?

Reppresentazioni principali delle rotazioni

Matrici 3x3

quello tipic. usato durante il

rendering (nella GPU)

(36)

Modo 1: matrice 3x3

(9 floats)

dopotutto, una rot è un es di trasf affine (sottomatrice 3x3 della matrice di trasf 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)

Facile da applicare (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:

R 0

k + (1-k) R 1 = M

in genere NON di rotazione (non ortonormale)

perché?

(37)

Modo 1: matrice 3x3

(9 floats) Molto efficiente da applicare

prodotti e somme, no trigonometria

Piu’ traslazione: matrice 4x4

cumulabile con tutte le altre trasf affini!

metodo tipic. adottato per memorizzare ed eseguire trasformazioni spaziali nel GPU-based rendering!

(nel vertex shader)

Reppresentazioni principali delle rotazioni

Matrici 3x3

Angoli di Eulero

il più intuitivo dei metodi

per specificare a mano una rot molto usato nei software

di modellazione

(38)

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)

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”

rollio (roll )

beccheggio (pitch )

imbardata

(yaw )

(39)

Modo 2: angoli di eulero

(3 floats)

Implementaz.

fisica:

“mappamondo a tre assi”

Modo 2: angoli di eulero

(3 floats)

Compattezza: perfect!

Da applicare: un po’ faticoso

(tre rotazioni in fila)

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…

perché sommare e invertire gli angoli non funziona?

(40)

da: angoli di eulero a: matrice 3x3

Facile!

Il viceversa?

(solo a suon di conti e funz trigon. inverse)

( ) γ y ( ) ( ) β x α

z R R

R

M = ⋅ ⋅

Recap: rappresentaz di rotaz.

1/2

3x3 Matrix Euler Angles

Space efficient?

(in RAM, GPU, storage…)

Apply

(to points/vectors)

Invert

(produce inverse)

Cumulate

(with another rotation)

Interpolate

(with another rotation)

Intutive?

(e.g. to manually set)

Notes… skew + scale!Free

easy to do…

unintuitive result trigonometry sin/cos

?!?

9 products (3 dot products)

just transpose

9 scalars 3 scalars

(even small int!)

rollio &

beccheggio &

imbardata matrix

multiplication (9 dots)

GIMBAL LOCK

E f fic ie n t / e a s y t o

Riferimenti

Documenti correlati

Eventuale Interruzione NESSUNA RICHIESTA SPECIFICA Titolo/i di studio LICENZA MEDIA INFERIORE Qualifica , corso di formazione. NESSUNA RICHIESTA SPECIFICA

Docenti di lingua presentazione nelle classi degli obiettivi, tempi, contenuti del progetto Responsabile di progetto stesura della circolare con calendario delle lezioni degli

Denominazione del fondo Entità della quota in valore assoluto Annotazioni UNICREDIT 17 SUP TLX 50% di € 60.000,00. UNICRED 11/17 TV TLX 50% di

Denominazione del fondo Entità della quota in valore assoluto

Denominazione del fondo Entità della quota in valore assoluto

Vanno specificati i periodi svolti con rapporto di lavoro a tempo pieno o tempo parziale)... Nel caso in cui la pubblicazione sia a firma di più autori, evidenziare la parte curata

Esaminando il primo motivo, con esso il contribuente sostiene innanzitutto l'illegittimità della pronuncia impugnata perché il giudice regionale non avrebbe tenuto conto

r) di fruire / non fruire dei seguenti interventi di assistenza domiciliare diretta o indiretta (componente sociale) erogati dal Comune di residenza e/o dal Distretto Sociale