Đồ 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'
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:
- Đồ họa 2D - Các phép biến đổi.pdf