Đồ họa 2D - Các phép biến đổi

Phép biến đổi là một ánh xạ từ không gian R2vào R2:

-Biến một điểm P thành một điểm P’

-Biến một đối tượng S thành đối tượng S'

pdf46 trang | Chuyên mục: Đồ Họa Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1774 | Lượt tải: 3download
Tóm tắt nội dung Đồ họa 2D - Các phép biến đổi, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ÑOÀ HOÏA 2D
CAÙ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ø 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 2
P
S
S’
AÛnh
Coâ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án
22

Trang 3



=
=
)P,P(TP
)P,P(T P
hay
yxy
'
y
yxx
'
x
Ñò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 + e
Ty(x, y) = bx + dy + f
Trang 4
Heä 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 5
Coâ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 6
( ) ( )










=
=
1fe
0dc
0ba
.1PP1PP
hoaëc
M.P'P
yx
'
y
'
x
Ma traän bieán ñoåi
Coâ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 7










−
−
145
023
022
Caáu truùc döõ lieäu
// Lưu thông tin phep bien doi affine
struct TAffine2D {
double M[3][3];
};
Trang 8
Bieán ñoåi ñieåm – Caøi ñaët
TPoint2D 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 9
Q;
}
Caøi ñaët
void Read_Transform_Convert_Draw_2D(CDC *pDC, char *filename, 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 bieán ñoåi xeùn chuyeån toïa ñoä veõ
Trang 10
// 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 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 11
Baûo toaøn tính thaúng
GT
d laø ñöôøng thaúng
d’ = T(d)
KL d’ laø ñöôøng thaúng
T
d d’
Trang 12
Baûo toaøn tæ leä
GT
A, B, C laø 3 ñieåm 
thaúng haøng
A’ = T(A) 
B’ = T(B) 
C’ = T(C)
A
B
C
A’
B’
C’T
Trang 13
KL A’:B’:C’ = A:B:C
Baûo toaøn song song
GT
d1 // d2
d1’ = T(d1)
d2’ = T(d2)
KL d1’ // d2’
T
d d
d1’
d2’
Trang 14
1 2
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.
T
T
Trang 15
T
Bieán ñoåi ñoái töôïng
Trang 16
Bieán ñoåi ñoái töôïng
Trang 17
Bieán ñoåi ñoái töôïng
Trang 18
Bieán ñoåi ñoái töôïng
Trang 19
Bieán ñoåi ñoái töôïng
Trang 20
Bieán ñoåi ñoái töôïng
Trang 21
Bieán ñoåi ñoái töôïng
Trang 22
Coâ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 23
( ) ( )










−
−
=
145
023
022
113103
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 24
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 25tx
ty
Pheùp tònh tieán – coâng thöùc







+=
+=
001
traän ma Daïng
tPP
tPP
haøm Daïng
yy
'
y
xx
'
x
Trang 26






=
1tt
010M
yx
Pheùp tònh tieán – Caøi ñaët
TAffine2D 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 27
return T;
}
Pheùp quay (rotation)
Duøng ñeå thay ñoåi höôùng cuûa caùc ñoái töôïng
Tham soá :
- Taâm quay : O
- Goùc quay : α
Trang 28
O
α
Pheùp quay – coâng thöùc



 αα



α+α=
α−α=
0sincos
traän ma Daïng
PcosPsinP
PsinPcosP
haøm Daïng
yx
'
y
yx
'
x
Trang 29






αα−=
100
0cossinM
Pheùp quay – caøi ñaët
TAffine2D 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 30
return T;
}
Pheùp tæ leä (scaling)
Duøng ñeå thay ñoåi kích thöôùc cuûa caùc ñoái töôïng
Tham soá :
- Taâm tæ leä : O
- Heä soá tæ leä : sx, sy
Trang 31
O
Pheùp tæ leä – coâng thöùc







=
=
00s
traän ma Daïng
PsP
PsP
haøm Daïng
x
yy
'
y
xx
'
x
Trang 32






=
100
0s0M y
Pheùp tæ leä – caøi ñaët
TAffine2D 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 33
return T;
}
Nguyeâ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 affine
Thì
- T = T1 + T2 laø pheùp bieán ñoåi affine
- M = M1 x M2
Trang 34
T1, M1 T2, M2
T, M
Nguyeâ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 35
T1
T2 T3
Tn
Caøi ñaët nguyeân lyù keát hôïp
TAffine2D 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 36
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)
Bieán “noù” thaønh chính “noù”



=
=
traän ma Daïng
PP
PP
haøm Daïng
y
'
y
x
'
x
Trang 37










=
100
010
001
M
Pheùp ñoàng nhaát – Caøi ñaët
TAffine2D 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 38
return T;
}
Pheùp ñoái xöùng (reflection)
y
Ñoái xöùng qua Oy
Trang 39
O x
Ñoái xöùng qua Ox
Pheùp ñoái xöùng – coâ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 40










−=
100
010
001
M









−
=
100
010
001
M
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 41
O x O x
β
Pheùp bieán daïng – coâng thöùc











=
β+=
001001
traän ma Daïng
PP
PtgPP
haøm Daïng
y
'
y
yx
'
x
Trang 42






=






β=
100
01sh M hoaëc 
100
01tgM x
Pheùp nghòch ñaûo
T
Trang 43
T-1
Pheùp nghòch ñaûo
≠










=
 coù T thì
0 bc - ad vôùi,
1fe
0dc
0ba
M
coù T Neáu
1-
Trang 44
















−
−
−
−
−−
−
−
−
−
=
1
bcad
afbe
bcad
decf
0
bcad
a
bcad
c
0
bcad
b
bcad
d
M 1-
Bieán ñoåi moâ hình ñoái töôïng phaân caáp
Trang 45
Bieán ñoåi moâ hình ñoái töôïng phaân caáp
T = T + T
Trang 46
con con-cha cha
Heä qui chieáu goác

File đính kèm:

  • pdfĐồ họa 2D - Các phép biến đổi.pdf