chuong_3b [Compatibility Mode].pdf

Preview:

Citation preview

Ñ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