Upload
ton-that-thien-ky
View
223
Download
0
Embed Size (px)
Citation preview
Ñ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
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
Moâ hình ñoái töôïngMoâ hình ñoái töôïng
Trang Trang Trang Trang Trang Trang Trang Trang 33333333
böôùc 1 : bieán ñoåiböôùc 1 : bieán ñoåi
Trang Trang Trang Trang Trang Trang Trang Trang 44444444
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
böôùc 4 : veõböôùc 4 : veõ
Keát quaû
Trang Trang Trang Trang Trang Trang Trang Trang 66666666
ÑOÀ HOÏA 2DÑOÀ HOÏA 2D
MOÂ HÌNHMOÂ HÌNH
Ñ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ôû
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
�
�
�
�
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
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
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
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
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
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];
};
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);
}
}
}
ÑOÀ HOÏA 2DÑOÀ HOÏA 2D
BIEÁN ÑOÅI TOÏA ÑOÄBIEÁN ÑOÅI TOÏA ÑOÄ
Daãn nhaäpDaãn nhaäp
Trang Trang Trang Trang Trang Trang Trang Trang 1818181818181818
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
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
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
++
−
−+−=
++
−
−+−=
→
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
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
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
Heä soá meùoHeä soá meùo
Trang Trang Trang Trang Trang Trang Trang Trang 2525252525252525
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;
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
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
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);
}
}
}