Lineární transformace © 1995-2015 Josef Pelikán CGG MFF UK Praha
[email protected] http://cgg.mff.cuni.cz/~pepca/ 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
1 / 28
Požadavky běžně používané transformace – posunutí, otočení, zvětšení/zmenšení, zkosení, .. – rovnoběžná i perspektivní projekce
snadná a efektivní implementace – výpočty se provádějí masově (běžně i 108 transformací najednou)
zvláštní úkony – zřetězení jednoduchých transformací, výpočet inverzní transformace, ... 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
2 / 28
Posunutí v rovině y
y [dx,dy]
x
x 3dTransform 2015
x
y x y dx © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
dy
3 / 28
Maticové transformace násobení vektoru souřadnic maticí zprava – kartézské souřadnice bodu [x,y] tvoří řádkový vektor – transformační matice je čtvercová (v rovině má rozměr 2×2)
x 3dTransform 2015
t11 t12 y x y t21 t22 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
4 / 28
Otočení v rovině kolem počátku y
y
x
cos R( ) sin 3dTransform 2015
x
sin cos
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
5 / 28
Zmenšení / zvětšení v rovině y
y
sy x
sx S(sx , sy ) 0 3dTransform 2015
sx
x
0 sy
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
6 / 28
Zkosení v rovině y
y
b
a x
x
1 a Sh (a, b) b 1 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
7 / 28
Homogenní souřadnice jednotná reprezentace afinních transformací – transformace zachovávající rovnoběžnost – posunutí nelze v kartézských souřadnicích reprezentovat maticově
nejpoužívanější neafinní transformace – perspektivní transformace (projekce)
reprezentace složených transformací – násobení matic (asociativita) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
8 / 28
Algebraická motivace Přímka v rovině má souřadnice [a,b,c] (mnohoznačné):
a· x + b· y + c = 0,
bod v rovině má souřadnice [x,y] (jednoznačné). Úloha 1: hledání přímky [a,b,c] procházející dvěma danými body [x1,y1] a [x2,y2]:
a· x1 + b· y1 + c = 0 a· x2 + b· y2 + c = 0 3dTransform 2015
soustava (1)
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
9 / 28
Algebraická motivace II Úloha 2: hledání bodu [x,y], ve kterém se protnou dvě dané přímky [a1,b1,c1] a [a2,b2,c2]:
a1· x + b1· y + c1 = 0 a2· x + b2· y + c2 = 0
soustava (2)
Soustava (1) má vždy (nekonečně mnoho) řešení, soustava (2) má řešení jen pokud není a1· b2 = a2· b1
3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
10 / 28
Algebraická motivace Po rozříření roviny o nevlastní body a zavedení homogenních souřadnic [x,y,w] budou obě předchozí úlohy symetrické a soustava (2’) bude vždy řešitelná:
a· x1 + b· y1 + c· w1 = 0 a· x2 + b· y2 + c· w2 = 0 a1· x + b1· y + c1· w = 0 a2· x + b2· y + c2· w = 0 3dTransform 2015
soustava (1’)
soustava (2’)
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
11 / 28
Převody souřadnic Kartézské na homogenní:
x
y x y 1
Homogenní na kartézské (jen vlastní body):
x x y w w w0 3dTransform 2015
y w
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
12 / 28
Geometrická představa w [x,y,w]
[uw,vw,w] 1
[x/w,y/w,1]
[u,v,1] O y 3dTransform 2015
x rovina kartézských souřadnic (w = 1)
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
13 / 28
Homogenní transformační matice Posunutí („translation”)
1 T(t x , t y ) 0 t x
Otočení („rotation”) kolem počátku
cos R( ) sin 0
sin cos 0
Zmenšení / zvětšení („scale”)
sx S(sx , sy ) 0 0
0 sy 0
3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
0 1 ty
0 0 1 0 0 1
0 0 1 14 / 28
Homogenní transformační matice II Zkosení („shear”)
1 a 0 Sh (a, b) b 1 0 0 0 1
Složené transformace:
[x, y, w ] T1 T2 T3
[ x, y, w ] T1 T2 T3
Otočení o úhel kolem bodu [x,y]:
R(x, y, ) T( x, y) R( ) T(x, y) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
15 / 28
Transformace v průmětně x
y x
y
souřadné systémy na výstupu Převod reálných souřadnic do souřadnic zobrazovaného okna: Xint = round ( Dx + Sx * Xf ) Yint = round ( Dy + Sy * Yf ) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
16 / 28
Prostorové souřadnice y
z
x z
y
levotočivý systém („right-handed”)
3dTransform 2015
x pravotočivý systém („left-handed”)
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
17 / 28
Homogenní souřadnice
x
y z x y z 1
x x y z w w Maticová transformace:
y w
z w
t11 t 21 x y z w x y z w t 31 t 41 3dTransform 2015
t12 t 22 t 32 t 42
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
(w 0)
t13 t 23 t 33 t 43
t14 t 24 t 34 t 44 18 / 28
Homogenní transformační matice Posunutí
Zkosení
3dTransform 2015
1 0 0 0 1 0 T(t x , t y , t z ) 0 0 1 t x t y t z 1 Sh (a, b, c, d, e, f ) c e 0 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
a 1 f 0
b d 1 0
0 0 0 1 0 0 0 1 19 / 28
Homogenní transformační matice II Otočení kolem osy y
cos 0 R y ( ) sin 0
Otočení kolem osy z
cos sin 0 0 R z ( ) sin cos 0 0 0 1 0 0 0 0 0 1
3dTransform 2015
0 sin 1 0 0 cos 0 0
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
0 0 0 1
20 / 28
Přenos polopřímky do osy z z
s A
O x y
Polopřímka je zadána bodem A a směrovým vektorem s
M T( A) M1 T(A)
1. krok: přenesení bodu A do počátku 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
21 / 28
Přenos polopřímky do osy z M T( A) R z ( )
z
1
M s
y
R z ( ) T(A)
cos x
sin
sy s2x s2y sx s2x s2y
2. krok: otočení polopřímky do roviny yz (okolo osy z) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
22 / 28
Přenos polopřímky do osy z M T( A) R z ( ) R x ( )
z
1
M
R x ( ) R z ( ) T(A)
cos
s’ x y
|sin |
sz s2x s2y s2z s2x s2y s2x s2y s2z
3. krok: otočení polopřímky do osy z (okolo osy x) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
23 / 28
Aplikace transformace M M(A, s) T( A) R z ( ) R x ( ) M(A, s)1 R x ( ) R z ( ) T(A)
Otočení kolem dané osy: R(A, s, ) M(A, s) R z ( ) M(A, s)
1
Zrcadlové převrácení podle dané roviny: Mirror ( A, n) M( A, n) S(11 , ,1) M(A, n)1 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
24 / 28
Výpočet inverzní transformace 1. inverze matice:
M1
2. po krocích: M ABC 1
M
1
1
C B A
1
3. transpozice (ortonormální matice): R 1 R T
pro ortonormá ln í matici R
(ortonormální jsou např. všechny rotační matice) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
25 / 28
Převod mezi souřadnými systémy u
z A
s t
O x y
Souřadný systém je zadán svým počátkem A a trojicí vektorů s, t, u
Cs M(A, u) Cs1 M(A, u)1
1. krok: přenesení polopřímky (A,u) do osy z 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
26 / 28
Převod mezi souřadnými systémy Cs (A, s, t, u) M(A, u) R z ( )
z
Cs (A, s, t, u)
u’
t’ y
s’
x
1
R z ( ) M(A, u)
cos sin
1
s M(A, u) x s M(A, u)
s M(A, u) y s M(A, u)
2. krok: ztotožnění os s’x a t’y (otočením kolem z=u’) 3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
27 / 28
Konec Další informace: J. Foley, A. van Dam, S. Feiner, J. Hughes: Computer Graphics, Principles and Practice, 201227 Jiří Žára a kol.: Počítačová grafika, principy a algoritmy, 73-84
3dTransform 2015
© Josef Pelikán, http://cgg.mff.cuni.cz/~pepca
28 / 28