29
ÑOÀ HOÏA 2D ÑOÀ HOÏA 2D QUI TRÌNH HIEÅN THÒ QUI TRÌNH HIEÅN THÒ Giaûng vieân : Buøi Tieán Leân

chuong_3a [Compatibility Mode].pdf

Embed Size (px)

Citation preview

Page 1: chuong_3a [Compatibility Mode].pdf

ÑOÀ HOÏA 2DÑOÀ HOÏA 2D

QUI TRÌNH HIEÅN THÒQUI TRÌNH HIEÅN THÒ

Giaûng vieân : Buøi Tieán Leân

Page 2: chuong_3a [Compatibility Mode].pdf

Caùc böôùc hieån thòCaùc böôùc hieån thò

Input : Moâ hình caùc ñoái töôïngOutput : Hình aûnh cuûa caùc ñoái töôïngböôùc 1 : Bieán ñoåi caùc ñoái töôïngböôùc 2 : Xeùn caùc ñoái töôïngböôùc 3 : Chuyeån heä toïa ñoäböôùc 4 : Veõ caùc ñoái töôïng

Trang Trang Trang Trang Trang Trang Trang Trang 22222222

böôùc 4 : Veõ caùc ñoái töôïng

Page 3: chuong_3a [Compatibility Mode].pdf

Moâ hình ñoái töôïngMoâ hình ñoái töôïng

Trang Trang Trang Trang Trang Trang Trang Trang 33333333

Page 4: chuong_3a [Compatibility Mode].pdf

böôùc 1 : bieán ñoåiböôùc 1 : bieán ñoåi

Trang Trang Trang Trang Trang Trang Trang Trang 44444444

Page 5: chuong_3a [Compatibility Mode].pdf

böôùc 2 + 3 : xeùn + chuyeån toïa ñoäböôùc 2 + 3 : xeùn + chuyeån toïa ñoä

Trang Trang Trang Trang Trang Trang Trang Trang 55555555

Page 6: chuong_3a [Compatibility Mode].pdf

böôùc 4 : veõböôùc 4 : veõ

Keát quaû

Trang Trang Trang Trang Trang Trang Trang Trang 66666666

Page 7: chuong_3a [Compatibility Mode].pdf

ÑOÀ HOÏA 2DÑOÀ HOÏA 2D

MOÂ HÌNHMOÂ HÌNH

Page 8: chuong_3a [Compatibility Mode].pdf

Ñoái töôïng ñöôïc bieåu dieãn nhö theá naøo ?Ñoái töôïng ñöôïc bieåu dieãn nhö theá naøo ?

Caùc ñoái töôïng cô sôû�Ñieåm�Ñoaïn thaúng�Ña giaùc�Ñöôøng cong (bezier, spline, bspline …)

Trang Trang Trang Trang Trang Trang Trang Trang 88888888

Caùc ñoái töôïng phöùc taïp ñöôïc taïo thaønh töø caùc ñoái töôïng cô sôû

Page 9: chuong_3a [Compatibility Mode].pdf

Toå chöùc taäp tin döõ lieäuToå chöùc taäp tin döõ lieäu

�ñoái töôïng cô sôû 1�ñoái töôïng cô sôû 2�

.TXT

Trang Trang Trang Trang Trang Trang Trang Trang 99999999

Page 10: chuong_3a [Compatibility Mode].pdf

Moâ hình baèng ñoaïn thaúngMoâ hình baèng ñoaïn thaúng

linelinelineline x1y1x2y2r g b

4

5

TAM_GIAC.TXT

Trang Trang Trang Trang Trang Trang Trang Trang 1010101010101010

1

3

2

1 2 3 4 5

1

2

3

mm

//cac doan thanglinelinelineline 0 0 4 0 255 0 0

linelinelineline 4 0 0 2.5 255 0 0

linelinelineline 0 2.5 0 0 255 0 0

Page 11: chuong_3a [Compatibility Mode].pdf

Moâ hình baèng ña giaùcMoâ hình baèng ña giaùc

polygonpolygonpolygonpolygon n x1y1… x

nynr g b4

5

TAM_GIAC.TXT

Trang Trang Trang Trang Trang Trang Trang Trang 1111111111111111

1 2 3 4 5

1

2

3

mm1

3

2

//cac da giacpolygon polygon polygon polygon 3 0 0 4 0 0 2.5 255 0 0

TAM_GIAC.TXT

Page 12: chuong_3a [Compatibility Mode].pdf

Ví duïVí duï

44

5//cac doan thang

linelinelineline 0 0 6 0 255 0 0

linelinelineline 6 0 6 2.5 255 0 0

linelinelineline 6 2.5 3 3.5 255 0 0

linelinelineline 3 3.5 0 2.5 255 0 0

linelinelineline 0 2.5 0 0 255 0 0

NHA.TXT

Trang Trang Trang Trang Trang Trang Trang Trang 1212121212121212

1

5

4

3

2

9

6

8

7

10

13 12

111 2 3 4 5 6 7m

1

2

3 linelinelineline 1 1 2 1 0 255 0

linelinelineline 2 1 2 2 0 255 0

linelinelineline 2 2 1 2 0 255 0

linelinelineline 1 2 1 1 0 255 0

linelinelineline 4 0 5 0 0 0 255

linelinelineline 5 0 5 2 0 0 255

linelinelineline 5 2 4 2 0 0 255

linelinelineline 4 2 4 0 0 0 255

Page 13: chuong_3a [Compatibility Mode].pdf

Ví duïVí duï

0.8

1.0

// cac doan thang

3

A.TXT

Trang Trang Trang Trang Trang Trang Trang Trang 1313131313131313

0.2 0.4 0.6 0.8 1.0 mm

0.2

0.4

0.6// cac doan thang

line line line line 0 0 0.5 1 0 0 0

linelinelineline 1 0 0.5 1 0 0 0

linelinelineline 0.25 0.5 0.75 0.5 0 0 0

1 2

4 5

Page 14: chuong_3a [Compatibility Mode].pdf

Ví duïVí duï

8 7

110.8

1.0

Trang Trang Trang Trang Trang Trang Trang Trang 1414141414141414

1 65

43

2

9 10

0.2 0.4 0.6 0.8 1.0 mm

0.2

0.4

0.6

Page 15: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaët// Lưu tọa độ của một điểm

struct TPoint2D {

double x, y;

};

// Lưu thông tin của một đa giác

struct TPolygon2D {

int

Trang Trang Trang Trang Trang Trang Trang Trang 1515151515151515

int n;

TPoint2D point[100];

};

Page 16: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaëtvoid Read_Draw_2D(CDC *pDC, char *filename)

{

ifstream f(filename);

if(f.fail()) return;

while(!f.eof())

{

char object[32];

f >> object;

if(strcmpi(object, “LINE”) == 0)

ñ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 1616161616161616

{

TPoint2D P1, P2;

int r, g, b;

// Doc doan thang

f >> P1.x >> P1.y >> P2.x >> P2.y >> r >> g >> b;

// Ve doan thang

pDC->MoveTo(P1.x, P1.y);

pDC->LineTo(P2.x, P2.y);

}

}

}

Page 17: chuong_3a [Compatibility Mode].pdf

ÑOÀ HOÏA 2DÑOÀ HOÏA 2D

BIEÁN ÑOÅI TOÏA ÑOÄBIEÁN ÑOÅI TOÏA ÑOÄ

Page 18: chuong_3a [Compatibility Mode].pdf

Daãn nhaäpDaãn nhaäp

Trang Trang Trang Trang Trang Trang Trang Trang 1818181818181818

Page 19: chuong_3a [Compatibility Mode].pdf

Bieán ñoåi toïa ñoä window Bieán ñoåi toïa ñoä window –– viewport laø gì ?viewport laø gì ?

Laø pheùp chuyeån ñoåi toïa ñoä theá giôùi thöïc hai chieàu sang toïa ñoä maøn hình.

Trang Trang Trang Trang Trang Trang Trang Trang 1919191919191919

heä toïa ñoä theá giôùi thöïc heä toïa ñoä maøn hình

Page 20: chuong_3a [Compatibility Mode].pdf

Coâng thöùc cho ñieåmCoâng thöùc cho ñieåm

t

l r

t

vuøng quan saùtW vuøng hieån thò

V

P P’

Trang Trang Trang Trang Trang Trang Trang Trang 2020202020202020

theá giôùi thöïc maøn hình

l r

bb

Page 21: chuong_3a [Compatibility Mode].pdf

Coâng thöùc cho ñieåmCoâng thöùc cho ñieåm

2VV

WWVV

)2WW

P(P

2VV

WWVV

)2WW

P(P

hình maøn thöïc giôùi Theá

bt

bt

btbty

'y

lr

lr

lrlrx

'x

++

−+−=

++

−+−=

Trang Trang Trang Trang Trang Trang Trang Trang 2121212121212121

2WW

VVWW

)2VV

P(P

2WW

VVWW

)2VV

P(P

thöïc giôùi Theá hình Maøn

bt

bt

btbt'yy

lr

lr

lrlr'xx

++

−+−=

++

−+−=

Page 22: chuong_3a [Compatibility Mode].pdf

Coâng thöùc cho ñoaïn thaúngCoâng thöùc cho ñoaïn thaúng

AA’

Trang Trang Trang Trang Trang Trang Trang Trang 2222222222222222

B B’

theá giôùi thöïc maøn hình

Page 23: chuong_3a [Compatibility Mode].pdf

Coâng thöùc cho ña giaùcCoâng thöùc cho ña giaùc

Trang Trang Trang Trang Trang Trang Trang Trang 2323232323232323

theá giôùi thöïc maøn hình

Page 24: chuong_3a [Compatibility Mode].pdf

Heä soá meùoHeä soá meùoKhi xaùc laäp cöûa soå window W vaø cöûa soå viewport V phaûi löu yù ñeán heä soá “meùo”

bt

bt

lr

lr

WWVV

WWVV

r

=

t

l r

t

WV

Trang Trang Trang Trang Trang Trang Trang Trang 2424242424242424theá giôùi thöïc maøn hình

l r

bb

tV

Page 25: chuong_3a [Compatibility Mode].pdf

Heä soá meùoHeä soá meùo

Trang Trang Trang Trang Trang Trang Trang Trang 2525252525252525

Page 26: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaët// Lưu thông tin cửa sổ quan sát

struct TWindow2D {

double l, r, b, t;

};

// Lưu thông tin cửa sổ hiển thị

struct TViewport2D {

int l, r, b, t;

Trang Trang Trang Trang Trang Trang Trang Trang 2626262626262626

int l, r, b, t;

};

// Khai báo các cửa sổ

TWindow2D W;

TViewport2D V;

Page 27: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaëtvoid SetWindow2D(double l, double r, double b, double t)

{

W.l = l;

W.r = r;

W.b = b;

W.t = t;

}

W

Trang Trang Trang Trang Trang Trang Trang Trang 2727272727272727

void SetViewport2D(int l, int r, int b, int t)

{

V.l = l;

V.r = r;

V.b = b;

V.t = t;

}

V

Page 28: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaëtCPoint ConvertWorldToScreen2D(double x, double y)

{

CPoint Q;

Q.x=(x-(W.r+W.l)/2)*(V.r-V.l)/(W.r-W.l)+(V.r+V.l)/2;

Q.y=(y-(W.t+W.b)/2)*(V.t-V.b)/(W.t-W.b)+(V.t+V.b)/2;

return Q;

}

Trang Trang Trang Trang Trang Trang Trang Trang 2828282828282828

CPoint ConvertWorldToScreen2D(TPoint2D P)

{

CPoint Q;

Q.x=(P.x-(W.r+W.l)/2)*(V.r-V.l)/(W.r-W.l)+(V.r+V.l)/2;

Q.y=(P.y-(W.t+W.b)/2)*(V.t-V.b)/(W.t-W.b)+(V.t+V.b)/2;

return Q;

}

W V

Page 29: chuong_3a [Compatibility Mode].pdf

Caøi ñaëtCaøi ñaëtvoid Read_Convert_Draw_2D(CDC *pDC, char *filename)

{

ifstream f(filename);

if(f.fail()) return;

while(!f.eof())

{

char object[32];

f >> object;

if(strcmpi(object, “LINE”) == 0)

{

TPoint2D P1, 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 2929292929292929

CPoint Q1, Q2;

int r, g, b;

// Doc doan thang

f >> P1.x >> P1.y >> P2.x >> P2.y >> r >> g >> b;

// Chuyen toa do

Q1 = ConvertWorldToScreen2D(P1);

Q2 = ConvertWorldToScreen2D(P2);

// Ve doan thang

pDC->MoveTo(Q1);

pDC->LineTo(Q2);

}

}

}