ÑOÀ HOÏA 2D ÑOÀ HOÏA 2D CAÙC PHEÙP BIEÁN ÑOÅI CAÙC PHEÙP BIEÁN ÑOÅI Giaûng vieân Buøi Tieán Leân
ÑOÀ HOÏA 2DÑOÀ HOÏA 2D
CAÙC PHEÙP BIEÁN ÑOÅICAÙC PHEÙP BIEÁN ÑOÅI
Giaûng vieân Buøi Tieán Leân
Pheùp bieán ñoåi laø gì ?Pheùp bieán ñoåi laø gì ?
Pheùp bieán ñoåi laø moät aùnh xaï töø khoâng gian R2 vaøo R2 :-Bieán moät ñieåm P thaønh moät ñieåm P’-Bieán moät ñoái töôïng S thaønh ñoái töôïng S’
P’
T
Trang Trang Trang Trang Trang Trang Trang Trang 22222222
P
P’
S
S’
AÛnh
Coâng thöùc pheùp bieán ñoåiCoâng thöùc pheùp bieán ñoåi
=
→
)P(T'P
haøm daïng ñoåi Bieán
P' P
R R : T
xaï aùnh daïng ñoåi Bieán22
�
Trang Trang Trang Trang Trang Trang Trang Trang 33333333
=
=
=
)P,P(TP
)P,P(T P
hay
)P(T'P
yxy'
y
yxx'
x
Ñònh nghóa bieán ñoåi affineÑònh nghóa bieán ñoåi affine
Pheùp bieán ñoåi affine laø pheùp bieán ñoåi maø caùc haøm bieán ñoåi Tx, Ty coù daïng tuyeán tính.
Tx(x, y) = ax + cy + eTy(x, y) = bx + dy + f
Trang Trang Trang Trang Trang Trang Trang Trang 44444444
Heä toïa ñoä thuaàn nhaátHeä toïa ñoä thuaàn nhaát
Heä toïa ñoä Ñeà caùc Heä toïa ñoä thuaàn nhaát
P(Px, Py) P(Px, Py, 1)
P(Px, Py) P(wPx, wPy, w)
Trang Trang Trang Trang Trang Trang Trang Trang 55555555
Coâng thöùc xaùc ñònh aûnh cuûa moät ñieåmCoâng thöùc xaùc ñònh aûnh cuûa moät ñieåm
++=
++=
traän ma Daïng
fdPbPP
ecPaPP
haøm Daïng
yx'
y
yx'
x
Trang Trang Trang Trang Trang Trang Trang Trang 66666666
( ) ( )
=
=
1fe
0dc
0ba
.1PP1PP
hoaëc
M.P'P
traän ma Daïng
yx'
y'
x
Ma traän bieán ñoåi
Coâng thöùc xaùc ñònh aûnh cuûa moät ñieåmCoâng thöùc xaùc ñònh aûnh cuûa moät ñieåm
++=
+=
ñoåi bieán traän ma daïng Hoaëc
4 2y 2x- y) (x,T
5 –3y 2x y) (x,T
haøm daïng ñoåi bieán thöùc Coâng
y
x
Trang Trang Trang Trang Trang Trang Trang Trang 77777777
−
−
145
023
022
ñoåi bieán traän ma daïng Hoaëc
Caáu truùc döõ lieäuCaáu truùc döõ lieäu// Lưu thông tin phep bien doi affine
struct TAffine2D {
double M[3][3];
};
Trang Trang Trang Trang Trang Trang Trang Trang 88888888
Bieán ñoåi ñieåm Bieán ñoåi ñieåm –– Caøi ñaëtCaøi ñaëtTPoint2D TransformPoint2D(TAffine2D T, TPoint2D P)
{
TPoint2D Q;
Q.x = T.M[0][0]*P.x + T.M[1][0]*P.y + T.M[2][0];
Q.y = T.M[0][1]*P.x + T.M[1][1]*P.y + T.M[2][1];
return
Trang Trang Trang Trang Trang Trang Trang Trang 99999999
return Q;
}
Caøi ñaëtCaøi ñaëtvoid Read_Transform_Convert_Draw_2D(CDC *pDC, char *filenamefilename, TAffine2D T){
. . .
TPoint2D P1, P2;
CPoint Q1, Q2;
int r, g, b;
// Doc doan thang tu tap tin
f >> P1.x >> P1.y >> P2.x >> P2.y >> r >> g >> b;
// Bien doi doan thang
P1 = TransformPoint2D(T, P1);
P2 = TransformPoint2D(T, P2);
ñoïcñoïc bieán ñoåibieán ñoåi xeùnxeùn chuyeån toïa ñoächuyeån toïa ñoä veõveõ
Trang Trang Trang Trang Trang Trang Trang Trang 1010101010101010
// Chuyen toa do doan thang
Q1 = ConvertWorldToScreen2D(P1);
Q2 = ConvertWorldToScreen2D(P2);
// Ve doan thang
pDC->MoveTo(Q1.x, Q1.y);
pDC->LineTo(Q2.x, Q2.y);
. . .
}
Tính chaát pheùp bieán ñoåi affineTính chaát pheùp bieán ñoåi affine
Moät pheùp bieán ñoåi affine luoân coù 3 tính chaát-Baûo toaøn tính thaúng-Baûo toaøn tæ leä-Baûo toaøn song song
Trang Trang Trang Trang Trang Trang Trang Trang 1111111111111111
Baûo toaøn tính thaúngBaûo toaøn tính thaúng
GTd laø ñöôøng thaúngd’ = T(d)
KL d’ laø ñöôøng thaúng
T
d d’
Trang Trang Trang Trang Trang Trang Trang Trang 1212121212121212
d d’
Baûo toaøn tæ leäBaûo toaøn tæ leä
GT
A, B, C laø 3 ñieåm thaúng haøngA’ = T(A) B’ = T(B) C’ = T(C)
A
B
C
A’
B’
C’T
Trang Trang Trang Trang Trang Trang Trang Trang 1313131313131313
C’ = T(C)
KL A’:B’:C’ = A:B:C
A A’
Baûo toaøn song songBaûo toaøn song song
GTd1 // d2
d1’ = T(d1)
d2’ = T(d2)
KL d1’ // d2
’
T
d d
d1’
d2’
Trang Trang Trang Trang Trang Trang Trang Trang 1414141414141414
d1d2
Heä quaûHeä quaû
-Ñoaïn thaúng bieán thaønh ñoaïn thaúng.-Ña giaùc bieán thaønh ña giaùc.-Ñöôøng cong bezier bieán thaønh ñöôøng cong Bezier.
TT
Trang Trang Trang Trang Trang Trang Trang Trang 1515151515151515
T
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 1616161616161616
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 1717171717171717
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 1818181818181818
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 1919191919191919
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 2020202020202020
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 2121212121212121
Bieán ñoåi ñoái töôïngBieán ñoåi ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 2222222222222222
Coâng thöùc xaùc ñònh aûnh cuûa moät ñieåmCoâng thöùc xaùc ñònh aûnh cuûa moät ñieåm
( ) ( )
−
−
=
B' thaønh bieán B
145
023
022
122145
A' thaønh bieán A
Trang Trang Trang Trang Trang Trang Trang Trang 2323232323232323
( ) ( )
−
−
=
145
023
022
113103
B' thaønh bieán B
Caùc pheùp bieán ñoåi affine cô sôûCaùc pheùp bieán ñoåi affine cô sôû
Coù 3 pheùp bieán ñoåi cô sôû-Pheùp tònh tieán-Pheùp quay-Pheùp tæ leä
Trang Trang Trang Trang Trang Trang Trang Trang 2424242424242424
Pheùp tònh tieán (translation)Pheùp tònh tieán (translation)
Duøng ñeå thay ñoåi vò trí cuûa caùc ñoái töôïng töø vò trí naøy sang vò trí khaùc.Tham soá :- Ñoä dòch chuyeån treân truïc Ox : tx
- Ñoä dòch chuyeån treân truïc Oy : ty
Trang Trang Trang Trang Trang Trang Trang Trang 2525252525252525tx
ty
Pheùp tònh tieán Pheùp tònh tieán –– coâng thöùccoâng thöùc
+=
+=
001
traän ma Daïng
tPP
tPP
haøm Daïng
yy'
y
xx'
x
Trang Trang Trang Trang Trang Trang Trang Trang 2626262626262626
=
1tt
010
001
M
yx
Pheùp tònh tieán Pheùp tònh tieán –– Caøi ñaëtCaøi ñaëtTAffine2D BuildTranslation2D(double tx, double ty)
{
TAffine2D T;
T.M[0][0]=1; T.M[0][1]=0; T.M[0][2]=0;
T.M[1][0]=0; T.M[1][1]=1; T.M[1][2]=0;
T.M[2][0]=tx; T.M[2][1]=ty; T.M[2][2]=1;
Trang Trang Trang Trang Trang Trang Trang Trang 2727272727272727
return T;
}
Pheùp quay (rotation)Pheùp quay (rotation)
Duøng ñeå thay ñoåi höôùng cuûa caùc ñoái töôïngTham soá :- Taâm quay : O- Goùc quay : α
Trang Trang Trang Trang Trang Trang Trang Trang 2828282828282828
O
α
Pheùp quay Pheùp quay –– coâng thöùccoâng thöùc
αα
α+α=
α−α=
0sincos
traän ma Daïng
PcosPsinP
PsinPcosP
haøm Daïng
yx'
y
yx'
x
Trang Trang Trang Trang Trang Trang Trang Trang 2929292929292929
αα−
αα
=
100
0cossin
0sincos
M
Pheùp quay Pheùp quay –– caøi ñaëtcaøi ñaëtTAffine2D BuildRotation2D(double alpha)
{
TAffine2D T;
alpha *= PI/180;
T.M[0][0]=cos(alpha); T.M[0][1]=sin(alpha); T.M[0][2]=0;
T.M[1][0]=-sin(alpha); T.M[1][1]=cos(alpha); T.M[1][2]=0;
T.M[2][0]=0; T.M[2][1]=0; T.M[2][2]=1;
Trang Trang Trang Trang Trang Trang Trang Trang 3030303030303030
return T;
}
Pheùp tæ leä (scaling)Pheùp tæ leä (scaling)
Duøng ñeå thay ñoåi kích thöôùc cuûa caùc ñoái töôïngTham soá :- Taâm tæ leä : O- Heä soá tæ leä : sx, sy
Trang Trang Trang Trang Trang Trang Trang Trang 3131313131313131
O
Pheùp tæ leä Pheùp tæ leä –– coâng thöùccoâng thöùc
=
=
00s
traän ma Daïng
PsP
PsP
haøm Daïng
x
yy'
y
xx'
x
Trang Trang Trang Trang Trang Trang Trang Trang 3232323232323232
=
100
0s0M y
x
Pheùp tæ leä Pheùp tæ leä –– caøi ñaëtcaøi ñaëtTAffine2D BuildScaling2D(double sx, double sy)
{
TAffine2D T;
T.M[0][0]=sx; T.M[0][1]=0; T.M[0][2]=0;
T.M[1][0]=0; T.M[1][1]=sy; T.M[1][2]=0;
T.M[2][0]=0; T.M[2][1]=0; T.M[2][2]=1;
Trang Trang Trang Trang Trang Trang Trang Trang 3333333333333333
return T;
}
Nguyeân lyù keát hôïp caùc pheùp bieán ñoåiNguyeân lyù keát hôïp caùc pheùp bieán ñoåi
Neáu T1, T2 laø pheùp bieán ñoåi affineThì
- T = T1 + T2 laø pheùp bieán ñoåi affine- M = M1 x M2
Trang Trang Trang Trang Trang Trang Trang Trang 3434343434343434
T1, M1 T2, M2
T, M
Nguyeân lyù phaân raõ pheùp bieán ñoåiNguyeân lyù phaân raõ pheùp bieán ñoåi
Moïi pheùp bieán ñoåi affine baát kyø ñeàu coù theå phaân raõ thaønh moät chuoãi caùc pheùp bieán ñoåi cô baûn.
T
Trang Trang Trang Trang Trang Trang Trang Trang 3535353535353535
T1
T2 T3
Tn
Caøi ñaët nguyeân lyù keát hôïpCaøi ñaët nguyeân lyù keát hôïpTAffine2D operator + (TAffine2D T1, TAffine2D T2)
{
TAffine2D T;
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
{
T.M[i][j] =
T1.M[i][0]*T2.M[0][j] +
Trang Trang Trang Trang Trang Trang Trang Trang 3636363636363636
T1.M[i][0]*T2.M[0][j] +
T1.M[i][1]*T2.M[1][j] +
T1.M[i][2]*T2.M[2][j];
}
return T;
}
Pheùp ñoàng nhaát (Identity)Pheùp ñoàng nhaát (Identity)
Bieán “noù” thaønh chính “noù”
=
=
traän ma Daïng
PP
PP
haøm Daïng
y'
y
x'
x
Trang Trang Trang Trang Trang Trang Trang Trang 3737373737373737
=
100
010
001
M
traän ma Daïng
Pheùp ñoàng nhaát Pheùp ñoàng nhaát –– Caøi ñaëtCaøi ñaëtTAffine2D BuildIdentity2D()
{
TAffine2D T;
T.M[0][0] = 1; T.M[0][1] = 0; T.M[0][2] = 0;
T.M[1][0] = 0; T.M[1][1] = 1; T.M[1][2] = 0;
T.M[2][0] = 0; T.M[2][1] = 0; T.M[2][2] = 1;
Trang Trang Trang Trang Trang Trang Trang Trang 3838383838383838
return T;
}
Pheùp ñoái xöùng (reflection)Pheùp ñoái xöùng (reflection)
yÑoái xöùng qua Oy
Trang Trang Trang Trang Trang Trang Trang Trang 3939393939393939
O x
Ñoái xöùng qua Ox
Pheùp ñoái xöùng Pheùp ñoái xöùng –– coâng thöùccoâng thöùc
−=
=
traän ma Daïng
PP
PP
haøm Daïng
Ox truïc qua xöùng Ñoái
y'
y
x'
x
=
−=
traän ma Daïng
PP
PP
haøm Daïng
Oy truïc xöùng Ñoái
y'
y
x'
x
Trang Trang Trang Trang Trang Trang Trang Trang 4040404040404040
−=
100
010
001
M
traän ma Daïng
−
=
100
010
001
M
traän ma Daïng
Pheùp bieán daïng (shearing)Pheùp bieán daïng (shearing)
Duøng ñeå laøm nghieâng ñoái töôïng theo moät truïc naøo ñoù.Tham soá :- Truïc nghieâng : Ox- Goùc nghieâng : β
Trang Trang Trang Trang Trang Trang Trang Trang 4141414141414141
O x O x
β
Pheùp bieán daïng Pheùp bieán daïng –– coâng thöùccoâng thöùc
=
β+=
001001
traän ma Daïng
PP
PtgPP
haøm Daïng
y'
y
yx'
x
Trang Trang Trang Trang Trang Trang Trang Trang 4242424242424242
=
β=
100
01sh
001
M hoaëc
100
01tg
001
M x
Pheùp nghòch ñaûoPheùp nghòch ñaûo
T
Trang Trang Trang Trang Trang Trang Trang Trang 4343434343434343
T-1
Pheùp nghòch ñaûoPheùp nghòch ñaûo
≠
=
coù T thì
0 bc - ad vôùi,
1fe
0dc
0ba
M
coù T Neáu
1-
Trang Trang Trang Trang Trang Trang Trang Trang 4444444444444444
−
−
−
−−−
−−
−
−
=
1bcad
afbebcad
decf
0bcad
abcad
c
0bcad
bbcad
d
M
coù T thì
1-
Bieán ñoåi moâ hình ñoái töôïng phaân caápBieán ñoåi moâ hình ñoái töôïng phaân caáp
Trang Trang Trang Trang Trang Trang Trang Trang 4545454545454545
Bieán ñoåi moâ hình ñoái töôïng phaân caápBieán ñoåi moâ hình ñoái töôïng phaân caáp
T = T + T
Trang Trang Trang Trang Trang Trang Trang Trang 4646464646464646
Tcon = Tcon-cha + Tcha
Heä qui chieáu goác