TRASFORMAZIONI GEOMETRICHE prima versione equazioni di trasformazione 1

  • Slides: 52
Download presentation
TRASFORMAZIONI GEOMETRICHE prima versione: equazioni di trasformazione 1

TRASFORMAZIONI GEOMETRICHE prima versione: equazioni di trasformazione 1

Introduzione alla Grafica Digitale Visualizzazione e trasformazioni geometriche: la "catena di montaggio" dell'immagine o

Introduzione alla Grafica Digitale Visualizzazione e trasformazioni geometriche: la "catena di montaggio" dell'immagine o "viewing pipeline" : costruzn. scena in coordinate-mondo (modelingtransf. ) trasforma coordin. mondo in coordin. vista (viewing) trasf. coord. vista in coord. normalizz. window->viewport trasforma coordin. normalizzate in coor. schermo (device) l'oggetto (con piu'parti, ciascuna trasformata opportunamente con traslazione, rotazione, scalaggio) e' definito in coordinate modello (modelling space), poi inserito in un mondo - coordin. problema (world coordinate system), in unita' di misura utente (km, micron, anni luce, secondi, tonnelate); interessa vedere solo una parte di questo mondo, parte che e' ritagliata (clipping) dalla finestra di visualizzazione (viewing window) seguito dalla trasformazione in coordinate schermo ( spesso c'e' in mezzo un passaggio coord. window in coord. normalizz. 2 in una finestra unitaria (min=zero, max=uno)

due osservazioni: molto spesso una scena e' fatta con piu' oggetti molto simili, ad

due osservazioni: molto spesso una scena e' fatta con piu' oggetti molto simili, ad es. una scena di traffico presenta molti oggetti "automobile", che possono essere pensati come repliche di un unico oggetto base (piu' istanze di un ogetto base); un mazzo di fiori puo' essere pensato come un insieme di istanze dell'oggetto fiore ecc; 3

un'altra caratteristica presente in molte scene e' l'appartenenza di un oggetto come parte di

un'altra caratteristica presente in molte scene e' l'appartenenza di un oggetto come parte di un sistema composto, ad es. le dita di una mano hanno una posizione relativa al braccio P 1, e questo a sua volta una posizione relativa al corpo P 2, e infine il corpo ha una posizione relativa alla scena (al mondo) P 3; la posizione del dito e' data dalla composizione delle tre posizioni relative P 1, P 2 e P 3; ancora: posizione di un "satellite" di un "pianeta" di un "sistema solare" di una "galassia" ecc; -> "composizione e ereditarieta' delle posizioni" : "pianeta" "satellite" "sistema solare" 4

le trasformazioni geometriche sono usate sempre per la visualizzazione di oggetti: 5

le trasformazioni geometriche sono usate sempre per la visualizzazione di oggetti: 5

a) Translation (2 parameters) c) Rotation (1 parameter +P) b) Scale (2 parameters +

a) Translation (2 parameters) c) Rotation (1 parameter +P) b) Scale (2 parameters + P) d) Shear (2 parameters) le trasformazioni affini conservano il parallelismo 6

Trasformazioni geometriche Le trasformazioni geometriche permettono di istanziare una stessa geometria con attributi diversi

Trasformazioni geometriche Le trasformazioni geometriche permettono di istanziare una stessa geometria con attributi diversi (posizione, orientamento, fattori di scala). 7

Trasformazioni geometriche Entità geometriche – Punto - entità geometrica caratterizzata da un solo attributo:

Trasformazioni geometriche Entità geometriche – Punto - entità geometrica caratterizzata da un solo attributo: la posizione rispetto ad un sistema di riferimento (x, y) in 2 D, (x, y, z) in 3 D – Vettore - entità geometrica caratterizzata da due attributi: lunghezza e direzione (l, x, y) in 2 D – Lunghezze, angoli, etc. sono espresse mediante scalari. 8

Trasformazioni geometriche Spazio vettoriale Due entità: Scalari (a, b, c, … ) Vettori (T,

Trasformazioni geometriche Spazio vettoriale Due entità: Scalari (a, b, c, … ) Vettori (T, U, V, … ). Operazioni: Somma e moltiplicazione di scalari; Somma vettore + vettore; Moltiplicazione scalare * vettore. 9

Trasformazioni geometriche Spazio affine Tre entità: Scalari (a, b, c, … ) Vettori (T,

Trasformazioni geometriche Spazio affine Tre entità: Scalari (a, b, c, … ) Vettori (T, U, V, … ) Punti (P, Q, R, … ) Operazioni: Le operazioni di uno spazio vettoriale, Somma punto + vettore (restituisce un punto), Sottrazione punto - punto (restituisce un vettore). 10

Trasformazioni geometriche Le trasformazioni geometriche sono lo strumento che consente di manipolare punti e

Trasformazioni geometriche Le trasformazioni geometriche sono lo strumento che consente di manipolare punti e vettori all’interno del mondo dell’applicazione grafica; Le trasformazioni geometriche sono funzioni che mappano un punto (vettore) in un altro punto (vettore); La trasformazione di una primitiva geometrica si riduce alla trasformazione dei punti caratteristici (vertici) che la identificano nel rispetto della connettività originale. Questo grazie al fatto che trattiamo di trasformazioni affini; il resto della primitiva grafica, ridisegnato sulla base dei punti caratteristici nuovi, sara' disegnato trasformato di conseguenza (es. per un'ellisse o un cerchio: si trasla il centro e si ridisegna con lo stesso raggio) 11

Trasformazioni geometriche Le trasformazioni geometriche affini sono trasformazioni lineari Esse preservano: collinearità (I punti

Trasformazioni geometriche Le trasformazioni geometriche affini sono trasformazioni lineari Esse preservano: collinearità (I punti di una linea giacciono ancora su di una linea dopo la trasformazione); rapporto tra le distanze (Il punto medio di un segmento rimane il punto medio di un segmento anche dopo la trasformazione). 12

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano 2 D, un primo elenco: traslazione (translation) rotazione (rotation) scalatura (scaling) inclinazione (shear) (= scalatura e cambio angolo degli assi x, y) 13

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano 2 D, attorno l'origine: traslazione (translation): x 1 = x+tx; y 1 = y+ty; rotazione (rotation) x 1= x*cos(a)-y*sin(a); y 1= x*sin(a)+y*cos(a); scalatura (scaling) x 1 = x*sx; y 1 = y*sy; inclinazione (shear) (= scalatura e cambio angolo degli assi x, y) x 1 = x+shx*y; y 1 = y+x*shy; (dove shx oppure shy e' zero) 14

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano

Trasformazioni geometriche operazioni base usate nel processo di visualizzazione sono: trasformazioni geometriche nel piano 2 D attorno l'origine - elenco: traslazione (translation) rotazione (rotation) scalatura (scaling) inclinazione (shear) inoltre nel passaggio da scena utente a immagine su schermo: eliminazione parti fuori scena (clipping) riempimento parti a colore pieno (filling) mascheramento (masking) di parti coperte da altri oggetti sullo schermo (es. menu', altre finestre ecc) ==>> vediamo in dettaglio queste trasformazioni 15

Trasformazioni geometriche - traslazione trasformazioni geometriche nel piano: traslazione (translation): x 1=x+tx; y 1=y+ty;

Trasformazioni geometriche - traslazione trasformazioni geometriche nel piano: traslazione (translation): x 1=x+tx; y 1=y+ty; in notazione vettoriale: rappresento con vettore colonna P= | x| | y| da cui : P' | x' | = | y' | T | tx | = | ty | P' = P + T la traslazione trasforma un oggetto grafico (geometrico) senza deformazione, ogni punto dell'oggetto e' traslato per la stessa quantita'; la traslazione dell'oggetto avviene traslando tutti i punti dell'oggetto e poi ridisegnando l'oggetto 16

Trasformazioni geometriche- traslazione (translation): x 2 = x 1 + tx; y 2 =

Trasformazioni geometriche- traslazione (translation): x 2 = x 1 + tx; y 2 = y 1 + ty; P 2 = P 1 + T P 1 = | x 1 | | y 1 | P 2 = | x 2 | | y 2 | T= | tx | | ty | 17

Trasformazioni geometriche- traslazione (translation): x 1=x+tx; y 1=y+ty; in notazione vettoriale: P' = P

Trasformazioni geometriche- traslazione (translation): x 1=x+tx; y 1=y+ty; in notazione vettoriale: P' = P + T con P = | X 1 | | X 2 | P' = | X' 1 | | X' 2 | T = | tx | | ty | la traslazione trasforma senza deformazione, "tutti" i punti dell'oggetto sono traslati e poi ridisegnati. . . ma: per un'ellisse o un cerchio: si trasla il centro e si ridisegna; curve a tratti di cubiche (spline): si traslano i punti pivot e poi si ridisegna; vi sono funzione per traslare (tutti gli oggetti) in tutti i linguaggi o librerie (classi); l'effetto o significato e': tutti gli oggetti disegnati dopo la chiamata alla opportuna "Translate" (punti o vertex) sono visualizzati traslati; 18

Trasformazioni geometriche- traslazione ancora qualche osservazione: la traslazione cambia nello stesso modo tutti i

Trasformazioni geometriche- traslazione ancora qualche osservazione: la traslazione cambia nello stesso modo tutti i punti del piano, ==>> non c'e' un punto fisso (pivot) come c'e' nella rotazione o nello scalaggio (vedremo); composizione di piu' traslazioni: posso applicare piu' traslazioni in ordine arbitrario, se x' = x + Tx x'' = x' + T'x e se = x'' = x' + T'x x + T'x allora = x + T'x + Tx 19

Trasformazioni geometriche - rotazione trasformazioni geometriche nel piano: 2) rotazione (rotation) attorno l'origine: x

Trasformazioni geometriche - rotazione trasformazioni geometriche nel piano: 2) rotazione (rotation) attorno l'origine: x 1=x*cos(a)-y*sin(a); y 1=x*sin(a)+y*cos(a); queste equazioni si ottengono ricordando le coordinate polari: r x = r*cos(a) y = r*sin(a) y a x rotazione: cambio angolo a, ovvero: a' = a+da da cui: x' = r*cos(a+da) = r*cos(a) * cos(da) - r*sin(a) * sin(da) y' = r*sin (a+da) = r*cos(a) * sin (da) + r*sin(a) * cos(da) quindi x' = x * cos(da) - y * sin (da) y' = x * sin (da) + y * cos(da) 20

Trasformazioni geometriche - rotazione la rotazione (nel piano x, y) e' sempre attorno ad

Trasformazioni geometriche - rotazione la rotazione (nel piano x, y) e' sempre attorno ad un punto, qui, l' origine: in OGL si specifica l'angolo e l'asse attorno cui si ruota: P 1 P da gl. Rotatef ( alfa, 0. , 1. ); nota: la rotazione in generale si riferisce ad un asse di rotazione (che puo' essere diverso dagli assi x, y e z) la rotazione nel piano x, y e' una rotazione attorno l'asse z ! 21

Trasformazioni geometriche - rotazione di un angolo a attorno all'origine : essendo x =

Trasformazioni geometriche - rotazione di un angolo a attorno all'origine : essendo x = r*cos(a) y = r*sin(a), e dato che una rotazione cambia angolo a, ovvero: a' = a+da, si ottiene: x 2 = x 1 * cos(da) - y 1 * sin (da) y 2 = x 1 * sin (da) + y 1 * cos(da) notazione vettoriale: la rotazione e' data dalla moltiplicazione del punto (vett. colonna) per la matrice di rotazione : P 2 = R * P 1 con R= | cos(da) -sin(da) | | sin(da) cos(da) | 22

Trasformazioni geometriche - rotazione se applico di seguito due rotazioni con angolo da 1

Trasformazioni geometriche - rotazione se applico di seguito due rotazioni con angolo da 1 e da 2 (sempre attorno all'origine) ho a 2 = a + da 1 + da 2 e vale la formula riportata prima, (l' ordine non importa!) : x 1 = x * cos(da 1) - y * sin (da 1) y 1 = x * sin (da 1) + y * cos(da 1) P 1'' P 1 = R 1 * P (notazione vettor. ) x 2 = x 1 * cos(da 2) - y 1 * sin (da 2) y 2 = x 1 * sin (da 2) + y 1 * cos(da 2) da 2 da 1 P 2 = R 2 * P 1 P 2 = R 2*R 1*P = R 21 * P con R 21 = R 2*R 1 23

abbiamo visto la rotazione attorno all'origine; vediamo ora una rotazione attorno un punto generico

abbiamo visto la rotazione attorno all'origine; vediamo ora una rotazione attorno un punto generico Q (xcr, ycr) detto centro di rotazione: P 1' P 1 da Q ycr x-xcr y-ycr x=xcr + (x-xcr) y=ycr + (y-ycr) e quindi: x' = xcr + (x-xcr ) * cos(da) - (y-ycr ) * sin(da) y' = ycr + (x-xcr ) * sin(da) + (y-ycr ) * cos(da) 24

rotazione attorno a un punto generico(xcr , ycr) x' = xcr + (x-xcr )

rotazione attorno a un punto generico(xcr , ycr) x' = xcr + (x-xcr ) * cos(da) - (y-ycr ) * sin(da) y' = ycr + (x-xcr ) * sin(da) + (y-ycr ) * cos(da) ottengo la stessa con lo schema seguente: 1) trasla in modo che il punto va nell'origine 2) ruota quanto richiesto attorno l'origine, poi 3) trasla indietro il punto dall'origine al suo posto in Open. GL: . . . gl. Translatef( My. Center. X, My. Center. Y, 0. 0 ); gl. Rotatef ( alfa, 0. 0, 1. 0 ); gl. Translatef( -My. Center. X, -My. Center. Y, 0. 0 ); . . . in Java 2 D e'definita la rotazione attorno un punto trasf. Corr. rotate( ang, xc, yc ); 25

nota: le operazioni di traslazione e di rotazione NON sono commutative ! due trasformazioni

nota: le operazioni di traslazione e di rotazione NON sono commutative ! due trasformazioni dello stesso tipo sono commutative, ad es. traslazioni: T 2 ( T 1 ( P )) == T 1 ( T 2 ( P)) oppure rotazioni: R 1 ( R 2 ( P )) == R 1 ( R 2 ( P)) scalatura: S 2 ( S 1 ( P )) == S 1 ( S 2 ( P)) ma non in generale: T 2 ( R 1 ( P ) ) != R 1 ( T 2 ( P ) ) esempio. . 26

trasla poi ruota centro di rotazione 3 2 1 ruota centro di rotazione poi

trasla poi ruota centro di rotazione 3 2 1 ruota centro di rotazione poi trasla 2 3 1 traslazione e rotazione non sono commutative l'ordine delle trasformazioni e' importante ! 27

nota: in generale una trasformazione affine che trasforma un oggetto di punti in un

nota: in generale una trasformazione affine che trasforma un oggetto di punti in un nuovo oggetto (fatta da zero o piu' traslazioni, rotazioni e scalature) e' reversibile, e puo' essere invertita con una "anti-trasformazione" : ad esempio la sequenza trasla 1 -ruota 2 -trasla 3 -scala 4 seguita da una sequenza anscala 4 -antrasla 3 -anruota 2 -antrasla 1 (dove "antrasla" sta per l' antitrasformata della trasla ecc) che riporta l'oggetto alla situazione iniziale (attenzione all'ordine) unica eccezione: reversibile: la scalatura per fattore zero un fattore di scala zero distrugge l'immagine! non e' 28

trasformazioni geometriche nel piano: abbiamo visto la traslazione x 1=x+tx; y 1=y+ty; e la

trasformazioni geometriche nel piano: abbiamo visto la traslazione x 1=x+tx; y 1=y+ty; e la rotazione x 1=x*cos(a)-y*sin(a); y 1=x*sin(a)+y*cos(a); vediamo ora scalatura (scaling) x 1=x*sx; y 1=y*sy; i fattori di scala sx e sy sono numeri positivi sx>1 ingrandisce, sx<1 rimpiccolisce nota che sx in genere e' diverso da sy ! notazione vettoriale: P' = S * P dove P e P' sono due punti, e S e' una matrice 2 x 2 S = | sx 0 | | 0 sy | 29

la trasformazione di scala (vista) si intende rispetto l' origine l'origine == punto (0,

la trasformazione di scala (vista) si intende rispetto l' origine l'origine == punto (0, 0) NON cambia posizione tutti gli altri punti in generale si' (ma nella figura in basso tutti i punti sull'asse y non cambiano posizione) ----->> x' = x * 2. 0; y' = y * 2. 0; ----->> 1 1 ----->> x' = x * 2. 0; y' = y; ----->> 1 1 30

la trasformaz. e di scala vista ora si intende rispetto l' origine l'origine ==

la trasformaz. e di scala vista ora si intende rispetto l' origine l'origine == punto (0, 0) NON cambia posizione anche la trasformazione di scala (come la rotazione) ha un centro di trasformazione ! nota: un fattore di scala <1 avvicina gli oggetti all'origine (oltre che rimpiccolirli), un fattore di scala > 1 allontana gli oggetti dall'origine. per l'operazione di scalatura attorno un punto generico "centro scalatura" si procede come per la rotazione: 1) trasla fino a portare il punto fisso nell' origine: P' = P - CS 2) scala P'' = S * P' (quindi x'' = sx*x' = sx*( x-x 0 ). . 3) trasla indietro: P''' = P''+CS (x'''=x''+x 0= sx*( x-x 0 )+x 0. . ) l'effetto complessivo e' la trasformazione di scala attorno il punto fisso: x = Sx * (x - x 0) + x 0; 31 y = Sy * (y - y 0) + y 0;

abbiamo visto le trasformazioni geometriche nel piano: traslazione (translation): rotazione (rotation) x'=x*cos(a)-y*sin(a); scalatura (scaling)

abbiamo visto le trasformazioni geometriche nel piano: traslazione (translation): rotazione (rotation) x'=x*cos(a)-y*sin(a); scalatura (scaling) x'=x+tx; y'=y+ty; y'=x*sin(a)+y*cos(a); x'=x*sx; y'=y*sy; vediamo la trasformazione di scorrimento rispetto un asse: o deformazione (scorrimento o inclinazione ) rispetto un'asse, in inglese shear: shear x'=x+shx*y; y'=y; es: 33

shear | sh i(ə)r| |ʃɪə| verb ( past part. shorn | sh ôrn| |ʃɔːn|or

shear | sh i(ə)r| |ʃɪə| verb ( past part. shorn | sh ôrn| |ʃɔːn|or sheared |ʃɪ(ə)rd|)1 [ trans. ] cut the wool off (a sheep or other animal). ・. . . | [ trans. ] the left wing had been almost completely sheared off. noun a strain in the structure of a substance produced by pressure, when its layers are laterally shifted in relation to each other. See also wind shear. ORIGIN Old English sceran (originally in the sense [cut through with a weapon] ), of Germanic origin; related to Dutch and German scheren, from a base meaning ヤ divide, shear, shave. ユ 34

la trasformazione shear x'=x+shx*y; y'=y; in generale si puo' avere uno scorrimento rispetto una

la trasformazione shear x'=x+shx*y; y'=y; in generale si puo' avere uno scorrimento rispetto una retta generica, ad es: x'=x + shx * ( y - yrif ); y'=y; qui x' = x + 0. 4 * (y - yref ); y' = y; con yref = -2 analogamente per scorrimento in direzione dell'asse y 35

abbiamo visto le trasformaz. i geometriche nel piano: traslazione (translation): rotazione (rotation) x 1=x*cos(a)-y*sin(a);

abbiamo visto le trasformaz. i geometriche nel piano: traslazione (translation): rotazione (rotation) x 1=x*cos(a)-y*sin(a); scalaggio (scaling) x 1=x+tx; y 1=y+ty; y 1=x*sin(a)+y*cos(a); x 1=x*sx; y 1=y*sy; shear (deformaz. di scorrimento lungo asse x o y ) x 1=x+shx*y; y 1=y+x*shy; dove o shx oppure shy e' zero 36

abbiamo visto le trasformaz. i geometriche nel piano: traslazione (translation): x 1=x+tx; y 1=y+ty;

abbiamo visto le trasformaz. i geometriche nel piano: traslazione (translation): x 1=x+tx; y 1=y+ty; rotazione (rotation) x 1=x*cos(a)-y*sin(a); y 1=x*sin(a)+y*cos(a) scalaggio (scaling) x 1=x*sx; y 1=y*sy; shear (inclinazione/deformaz. di scorrimento lungo asse x o y ) x 1=x+shx*y; y 1=y+x*shy; dove o shx oppure shy e' zero rimangono da vedere (ma lo vedremo piu' in la') : riflessione attorno una retta o attorno ad un punto, eliminazione parti fuori scena (clipping) riempimento parti a colore pieno (filling) mascheramento (masking) di parti coperte da altri oggetti sullo schermo (es. menu', altre finestre ecc) 37

MATRICI E COORDINATE OMOGENEE una trasformazione affine nel piano si puo' scrivere nella forma

MATRICI E COORDINATE OMOGENEE una trasformazione affine nel piano si puo' scrivere nella forma matriciale: P 1 = M 1 * P + M 2 con P 1, P punti del piano e con M 1 matrice 2 x 2, M 2 matrice colonna di 2 elementi (usata per la traslazione) 38

trasformazione affine nel piano in forma matriciale: P 1 = M 1 * P

trasformazione affine nel piano in forma matriciale: P 1 = M 1 * P + M 2 dove P 1, P sono punti del piano, M 1 matrice 2 x 2, M 2 matrice colonna di 2 elementi (traslaz. ) traslazione: x 1=x+tx; y 1=y+ty; in notazione vettoriale: P = (x, y), P' = (x', y'), T =(tx, ty), da cui : P' = P + T rotazione: x'= x*cos(da)-y*sin(da), y'= x*sin(da)+y*cos(da) in notazione vettoriale: P 1 = R * P con la matrice R= | cos(da) -sin(da) | | sin(da) cos(da) | scalatura: x 1=x*sx; y 1=y*sy; in notazione vettoriale: P 2 = S * P 39

traslazione: in notazione vettoriale: P = (x, y), P' = (x', y'), T =(tx,

traslazione: in notazione vettoriale: P = (x, y), P' = (x', y'), T =(tx, ty), da cui : P' = P + T rotazione: in notazione vettoriale: P 1 = R * P | cos(da) -sin(da) | | sin(da) cos(da) | scalatura: in notazione vettoriale: P 3 = S * P 2 con la matrice R= rotazione e scalatura possono essere concatenate: P 3 = S * P 2 = S * ( R * P 1 ) = (S * R ) * P 1 = M * P 1, M matrice 2 x 2, P punto del piano; ma attenzione: la traslazione non puo' essere concatenata e inglobata in un'unica matrice (non e' un prodotto, e' una somma); 40

trasformazione generica: P 2 = M 3 * ( M 1 * P 1

trasformazione generica: P 2 = M 3 * ( M 1 * P 1 + M 2 ) per ridurre la trasformazione nella forma P 2 = Mx * P 1 cioe' per evitare la M 2 sopra cioe' per ottenere una trasformazione generica nel piano con una unica operazione di prodotto di matrice si passa alle coordinate omogenee: invece di rappresentare un punto P con (x, y) si rappresenta un punto del piano con una terna (xh, yh, h) dove h e' un fattore moltiplicativo non nullo, si ottiene la coppia di coordinate x, y dividendo per h: (xh/h, yh/h, 1) i punti (xh, yh, h) sono tutti i punti della retta verticale con z=h, 41 retta che interseca il nostro piano (x, y) in h=1;

in coordinate omogenee: un punto del piano (x, y) e' rappresentato da una terna

in coordinate omogenee: un punto del piano (x, y) e' rappresentato da una terna (xh, yh, h) dove h e' un fattore moltiplicativo non nullo, si ri-ottiene la coppia di coordinate x, y dividendo per h: (xh/h, yh/h, 1) -->> con questa notazione si puo' esprimere anche la traslazione con un prodotto di matrici: traslazione: P' = MT * P con P' = x' y' , 1 1 0 tx MT = 0 1 ty 0 0 1 e P= x y 1 punto nuovo = matrice per punto vecchio, in notazione con coordinate omogenee anche la traslazione e' un prodotto di matrice per vettore. ricorda che era x 1=x+tx; y 1=y+ty; con notazione vettoriale: P = (x, y), P' = (x', y'), T =(tx, ty), da cui : P' = P + T in notazione vettoriale traslazione = somma di due vettori, 42

in coordinate omogenee: (xh, yh, h) traslazione: P' = MT * P con P'

in coordinate omogenee: (xh, yh, h) traslazione: P' = MT * P con P' = x' y', MT = 1 1 0 tx 0 1 ty 0 0 1 rotazione: P' = MR * P dove x' P' = y' 1 cos a MR = sin a 0 e P= -sin a 0 cos a 0 0 1 scalatura: x 1=x*sx; y 1=y*sy; ovvero che in coordinate omogenee diventa: x' sx 0 0 P' = y' MS = 0 sy 0 1 0 0 1 x y 1 x P= y 1 P' = S * P x P = y 1 43

trasformazioni inverse: spesso si ha necessita' di eseguire la trasformazione inversa, ovvero di dover

trasformazioni inverse: spesso si ha necessita' di eseguire la trasformazione inversa, ovvero di dover ritornare al sistema di coordinate precedente; tutte le trasformazioni viste hanno l'inversa: traslazione rotazione scalatura trasf. diretta trasf. inversa 1 0 tx 0 1 ty 0 0 1 1 0 -tx 0 1 -ty 0 0 1 cos(a) -sin(a) 0 sin(a) cos(a) 0 0 0 1 sx 0 0 sy 0 0 1 cos(a) sin(a) 0 -sin(a) cos(a) 0 0 0 1 1/sx 0 0 1/sy 0 0 1 44

trasformazioni composte: posso applicare in catena piu' trasformazioni, ad es due traslazioni M" e

trasformazioni composte: posso applicare in catena piu' trasformazioni, ad es due traslazioni M" e M' P" = M" * P' = M" * ( M' * P ) = (M" * M') * P traslazioni: vale la proprieta' associativa (anche commutativa) e la matrice di trasformazione e' la somma delle due matrici; per le rotazioni: M" = M(b) (angolo b), M'=M(a) (angolo a) P" = M(b) * P' = M(b) * ( M(a) * P ) = (M(b) * M(a)) * P la matrice risultante e' M(b+a) come intuitivo (somma delle due rotazioni attorno l'origine): anche per le rotazioni valgono le proprieta' associativa e commutativa; per scalatura: M"(sx", sy"), M'(sx', sy') si puo' verificare che la matrice risultante M = M" * M' = M(sx'*sx", sy'*sy") e' data dai fattori di scala che sono il prodotto dei singoli fattori ricordiamo che un fattore zero non e' invertibile ; -) anche per la scalatura valgono le proprieta' associativa e commutativa 45

trasformazioni composte: posso applicare in catena piu' trasformazioni: per trasformazioni dello stesso tipo valgono

trasformazioni composte: posso applicare in catena piu' trasformazioni: per trasformazioni dello stesso tipo valgono le proprieta' associativa P 2 = M 1 * M 2 * M 3 * P 1 = ( M 1 * (M 2 * M 3) ) * P 1 = (((M 1 * M 2) * M 3 ) * P 1 e anche commutativa: P 2 = M 1 * M 2 * M 3 * P 1 = M 2 * M 1 * M 3 * P 1 = M 3 * M 1 * M 2 * P 1 ecc ma attenzione: in generale per trasformazioni diverse (rotazioni e/o traslazioni e/o scalature ) NON vale la proprieta' commutativa, 46 l'ordine con cui si applicano le trasformazioni e' importante

nota: nel caso della vusualizzazione di scene complesse ogni pezzo (ogni punto, poligono ecc)

nota: nel caso della vusualizzazione di scene complesse ogni pezzo (ogni punto, poligono ecc) e' soggetto in generale a una catena di trasformazioni (anche diverse decine) che si traducono sempre in una unica matrice di trasformazione ! ==>> questo e' importante per la velocita' con cui sono trasformati i sigoli punti (o i singoli triangoli) per passare dalle coordinate del modello attraverso le coordinate mondo ecc fino alle coordinate schermo 47

trasformazioni composte: rotazione attorno un punto pivot generico (diverso da 0, 0) la matrice

trasformazioni composte: rotazione attorno un punto pivot generico (diverso da 0, 0) la matrice di trasformazione si ottiene applicando tre trasformazioni: trasla per portare il pivot nell'origine ruota attorno origine trasla indietro per riportare il pivot al suo posto: prodotto delle tre matrici T(xp, yp), R(a), T(-xp, -yp) 1 0 xp cos(a) -sin(a) 0 1 0 -xp 0 1 yp sin(a) cos(a) 0 0 1 -yp 0 0 1 ottengo: M = T(xp, yp) * R(a) * T(-xp, -yp) cos(a) sin(a) 0 -sin(a) cos(a) 0 xp(1 -cos(a)) + yp sin(a) yp(1 -cos(a)) - xp sin(a) 1 48

trasformazioni composte: scala attorno un punto pivot generico SG (scala generica) diverso dall'origine 0,

trasformazioni composte: scala attorno un punto pivot generico SG (scala generica) diverso dall'origine 0, 0 : il procedimento e' lo stesso: trasla + scala + traslaindietro: quindi prodotto delle tre matrici: 1 0 0 0 1 0 xp yp 1 sx 0 0 0 sy 0 0 0 1 1 0 -xp 0 1 -yp 0 0 1 = sx 0 0 sy 0 0 xp(1 -sx) yp(1 -sy) 1 T(xp, yp)*S(sx, sy)*T(-xp, -yp) = SG(xp, yp, sx, sy) 49

ricorda: il prodotto di matrici e' associativo, ovvero: M 4 = M 3 *

ricorda: il prodotto di matrici e' associativo, ovvero: M 4 = M 3 * M 2 * M 1 = (M 3 * M 2) * M 1 = M 3 * (M 2 * M 1) quindi posso ottenere la M 4 sia moltiplicando da sinistra a destra (pre-moltiplica) sia da destra a sinistra (post-molt); il Open. GL richiede che le trasformazioni siano attivate nell'ordine in cui devono essere applicate; nel caso sopra, prima la M 1, poi la M 2, poi la M 3 ancora: se devo traslare un oggetto e poi ruotarlo, allora applico prima la gl. Translatef(xx, yy, zz) e poi la gl. Rotatef(a, b, g, 1) 50

trasformazioni composte: l'Open. GL prevede delle procedure per posizionare le matrici di trasformazione specificando

trasformazioni composte: l'Open. GL prevede delle procedure per posizionare le matrici di trasformazione specificando non tutta la matrice ma solo i parametri essenziali (libreria gl. h) : gl. Translatef(d. X, d. Y, d. Z); // trasla floating gl. Rotatef(r. Eta, x, y, z); // ruota float gl. Scalef(sx, sy, sz); // fattore di scala float sono proc in 3 D, per 2 D mettere a zero d. Z, z, e a uno sz. Java 2 D prevede procedure analoghe: trasf. Corr. rotate( ang ); trasf. Corr. translate( dx, dy ); trasf. Corr. shear( shx, shy ); trasf. Corr. scale( sx, sy ); trasf. Corr. rotate( ang, xc, yc ); dove trasf. Corr e' una trasformazione definita: Affine. Trasform trasf. Corr =. . . ricorda che il fattore di scala zero NON e' reversibile !! 51

Introduzione alla Grafica Digitale - riassumendo: trasformazioni geometriche nel piano: traslazione (translation): x 1=x+tx;

Introduzione alla Grafica Digitale - riassumendo: trasformazioni geometriche nel piano: traslazione (translation): x 1=x+tx; y 1=y+ty; rotazione (rotation) x 1=x*cos(a)-y*sin(a); y 1=x*sin(a)+y*cos(a); scalatura (scaling) x 1=x*sx; y 1=y*sy; vedremo piu' avanti alcuni cenni su : eliminazione parti fuori scena (clipping) riempimento parti a colore pieno (filling) 52