Cài Đặt Thuật Toán Xén Một Đa Giác Vào Một Vùng Hình Chữ Nhật
-
Upload
freeloadtailieu -
Category
Documents
-
view
184 -
download
10
description
Transcript of Cài Đặt Thuật Toán Xén Một Đa Giác Vào Một Vùng Hình Chữ Nhật
Bo co Bi Tp Ln mn hc Ha My Tnh
TRNG I HC IN LCKHOA CNG NGH THNG TIN
Ti:Ci t Thut Ton Xn Mt a Gic Vo Mt Vng HnhCh NhtGing vin hng dn:
Lp:
D8LT CNTT6Nhm thc hin : Ha Thanh Tng+ Dng Th nh NguytThnh vin trong nhm :1. Ha Thanh Tng2. Dng Th nh Nguyt
H Ni, thng 06 nm 2013
LI NI U Ha My Tnh l mt lnh vc ca Cng Ngh Thng Tin, nghin cu, xy dng v tp hp cc cng c (m hnh l thuyt v phn mm) khc nhau kin to, xy dng, lu tr v x l cc m hnh v hnh nh ca cc i tng, s vt, hin tng trong cuc sng, sn xut, nghin cu.
Ha My Tnh gp phn quan trng lm cho giao tip gia con ngi v my tnh tr nn thn thin hn. Trong lnh vc k thut my tnh, Ha My Tnh cng ngy cng pht trin mng m. T ha trn my tnh chng ta c nhiu lnh vc c ng dng rt quan trng ca Ha My Tnh trong thc t nh: to m hnh, hot cnh (game, gii tr,), h tr thit k ha, m phng hnh nh, chun on hnh nh (trong Y t), hun luyn o to nh (qun s, hng khng,),
Trong Ha My Tnh c nhiu thut ton khc nhau. Xong mi thut ton li t ra c nhng u vit v hn ch ring i vi tng bi ton c th. V phc v cho vic tm hiu thm v cc thut ton trong Ha My Tnh, Nhm chng em vi s hng dn ca Ging vin Khoa CNTT Trng H in Lc thc hin ti: Ci t thut ton xn mt a gic vo mt vng hnh ch nht.
Chng em xin gi li cm n chn thnh ti thy gio: . tn tm ch bo v gip chng em hon thnh ti ny. Trong qu trnh lm ti s khng trnh khi nhng sai st, khuyt im. V vy, nhm thc hin chng em hy vng nhn c s nh gi v ng gp nhit tnh t pha thy c v cc bn bi ca nhm chng em c hon thin hnNhm Tng + Nguyt, lp D8LT CNTT6 chng em xin chn thnh cm n!
Trng H in Lc, thng 06 nm 2013.
MC LC
Tiu Trang
1LI NI U
MC LC3PHN 1: GII THIU CHUNG V TI4I. Gii Thiu Ti...4II. Gii Thiu Ngn Ng Lp Trnh c S Dng Trong Ti......4III. Gii Thiu Th Vin Graphics.h Trong Dev-C++......5IV. Cch s dng th vin ha trong Dev-C++.........5PHN 2: TNG XY DNG CHNG TRNH V CI T THUT
TON.......6I. Qui nh hin th i tng 2 chiu.......61.1. Mt s khi nim.....61.2. H ta quan st v h ta thit b chun....81.2.1. H ta quan st.......81.2.2. H ta thit b chun..91.3. Cc thut ton xn hnh..9II. Thut ton Cohen-Sutherland...10III. Thut ton xn a gic vo hnh ch nht v cc ln bin i .....11IV. CoDe Thut Ton Xn a Gic Vo Hnh Ch Nht13KT LUN.41TI LIU THAM KHO.42PHN 1: GII THIU CHUNG V TI
I. Gii Thiu Ti.
Cng vi s pht trin ca nn kinh t hin nay l s pht trin mnh m ca ngnh cng ngh thng tin. Cc ng dng ca cng ngh thng tin ngy cng nhiu v c mt trong hu ht cc lnh vc ca cuc sng.
Vi ti: Ci t thut ton xn mt a gic vo mt vng hnh ch nht, nhm Tng + Nguyt lp D8LT CNTT6 s trnh by v thut ton v xn hnh Sutherland - Hodgeman. ngha ca thut ton xn hnh trong cng ngh thng tin l khng h nh, c bit l i vi mn hnh my tnh th n c ngha v cng quan trng.
Qua ti ny nhm Tng + Nguyt mong s gip ch c cho mi ngi hiu thm phn no v thut ton xn hnh.II. Gii Thiu Ngn Ng Lp Trnh c S Dng Trong Ti
Stroustrup bt u lm vic vi khi nim lp trong1979. tng to ra mt ngn ng mi bt ngun t kinh nghim lp trnh khi m ng vit lun n tin s. Stroustrup nhn ra rngSimulac nhiu tnh nng hu dng cho vic pht trin mt phn mm ln nhng n qu chm trong ng dng thc t, trong khi ,BCPLli nhanh nhng cp qu thp v khng tin cho vic pht trin phn mm ln. n khi lm vic Bell Labs, th ng gp phi vn trong vic phn tchnhn Unixvi victnh ton phn tn. Dng li kinh nghim lc lm lun n tin s, Stroustrup ci thm cc tnh nng ging nh Simula vo trong C nng cao. C c chn l v l ngn ng tng qut, nhanh v nng ng. Ln u tin, cc chc nng nh l lp, lp dn xut, kim tra kiu mnh, ni tuyn (inline), v i s mc nh c thm vo trong C. Ln xut bn u tin vo th trng xy ra trong thng 11/1985.
Nm1983, th tnC vi cc lpc i thnh C++. cc chc nng mi c thm vo bao gm hm o, qu ti hm v ton t, tham chiu, hng, kh nng kim sot b nh ca lu tr t do, nng cao vic kim sot kiu, v lnh ch gii kiu (//).
Nm1985, tc phmThe C++ Programming Languagec xut bn ln u tin, cung cp mt ti liu tham kho quan trng cho ngn ng nhng cha l mt tiu chun chnh thc.
Nm1989phin bn C++ 2.0 pht hnh. Cc tnh nng mi bao gm a k tha, lp tru tng, hm tnh, hm thnh vin hng, v thnh vin bo tn.
Nm1990, cunThe Annotated C++ Reference Manualc xut bn cung cp nn tng cho tiu chun tng lai.
Phin bn xut bn sau c thm cc chc nng tiu bn, ngoi l, khng gian tn, chuyn kiu cho ton tnew, v kiuBoolean.
Khi C++ hnh thnh, th th vin chun hon thin vi n. Th vin C++ u tin thm vo liostream.hcung cp c s thay th cc hm C truyn thng nh lprintfvscanf. Su ny, trong nhng th vin chun quan trng nht c thm vo lTh vin Tiu bn Chun.
Sau nhiu nm lm vic, c s cng tc giaANSIv hi ng tiu chun ho C++ caISO son tho tiu chunISO/IEC 14882:1998. Phin bn tiu chun ny c pht hnh nm1989, hi ng tip tc x l cc bo co trc trc, v n hnh mt phin bn sa sai ca chun C++ trong nm 2003.
Khng ai l ch nhn ca ngn ng C++, n hon ton min ph khi dng. Mc d vy, cc vn bn tiu chun th khng min ph.
III. Gii Thiu Th Vin Graphics.h Trong Dev-C++. To mt chng trnh ho 2D trong DOS s dng turbo C kh d dng v ai cng c th lm c.Th vin oc #include c tn l graphis.h. Nhng cc th vin C/C++ ca borland li c 1 iu c bit l khng s dng c i vi 1 s trnh compiler khc, tuy nhin so vi cc IDE hin i th borland li km v mt qun l v tnh thun tin.
Chnh v l m bn hack th vin graphics cng nh cc th vin khc ra i, v hm nay th vin mnh mun gii thiu graphics.h ca Micheal.
Micheal thay i BGI library (th vin BGI) thnh th vin c tn WinBGIm c th s dng tt trn windows. V by gi bn c th s dng tt cc hm c bit ca borland bng dev-c++
IV. Cch s dng th vin ha trong Dev-C++.u tin bn ti file nh km v my mnh, gii nn ra s c 2 file lgraphics.hv libbgi.a+ Filegraphics.h th mc C:\Dev-Cpp\include+ Filelibbgi.a th mc C:\Dev-Cpp\lib(Nu bn ci mc inh Dev C++ C)
Tip theo bn khi ng Dev C++ ln, voFile-->New--> Project...-->Empty Project(Nh chn C++ Project) -->OKt tn cho Project ca mnh!
Nhn chut phi ln ci project ca bn -->New FileNhn Alt + P --->Chn th Parameters--> Copy v paste vo Linker nhng dng di y:-lbgi-lgdi32-lcomdlg32-luuid-loleaut32-lole32
(Bao gm c du "-")-->OK
Phn 2: tng xy dng chng trnh v ci t thut tonI. Qui nh hin th i tng 2 chiu1.1. Mt s khi nim Ca s (window) l mt vng c chn hin th trong h ta th gii thc.
Vng quan st (viewport) l vng c chn trn thit b hin th cc i tng trong ca s nh x vo.
Ca s xc nh ci g c thy trn thit b hin th, cn vng quan st xc nh ni no n s c hin th.
y chng ta nn phn bit khi nim ca s c dng trong phn ny vi khi nim ca s c dng trong cc chng trnh ng dng trn cc h iu hnh nh Windows.
Thng thng ca s v vng quan st c dng hnh ch nht, c cc cnh song song vi cc trc ta . Tuy nhin chng cng cn c mt s dng khc nh a gic, hnh trn,
Qu trnh nh x mt vng nh ngha trong h ta th gii thc vo mt vng trong h ta thit b c gi l php bin i h quan st (viewing transformation).
Php bin i h quan st vi ca s v vng quan st c dng l cc hnh ch nht Quy trnh hin th cc i tnng trong ha hai chiu c th c m t qua s sau :
Trc tin, cc i tng s c m t bng cc i tng ha c s v cc thuc tnh ca chng trong tng h ta cc b (modeling coordinates - MC) nhm n gin ha v tn dng cc c trng ring ca tng loi. Sau , chng ta s dng cc php bin i h ta chuyn cc m t t cc h ta cc b ny sang mt h ta th gii thc (world coordinates - WC) duy nht cha ton b cc i tng thnh phn. Php chuyn i ny c gi l php chuyn i m hnh (modeling coordinates transformation).
Tip theo, chng ta s nh mt h ta quan st (viewing coordinates - VC), l h ta m t v tr ca ngi quan st i tng. Nh vic s dng h ta ny m cng mt m t, cc i tng c th c quan st nhiu gc v v tr khc nhau.
Qui trnh hin th i tng 2 chiu Sau khi chuyn cc m t i tng t h ta th gii thc sang h ta quan st, chng ta s nh ngha ca s trong h ta ny, ng thi nh ngha vng quan st trong h ta thit b chun (normalized device coordinates - NDC)
c ta cc chiu thay i trong khong t 0 n 1.
Sau khi thc hin php nh x t ca s sang vng quan st, tt c cc phn ca i tng nm ngoi vng quan st s b xn (clip) v ton b nhng g nm trong vng quan st s c nh x sang h ta thit b (device coordinates - DC). Vic a ra h ta thit b chun nhm gip cho vic tng thch d dng vi nhiu loi thit b hin th khc nhau.Bng cch thay i v tr ca vng quan st chng ta c th quan st cc i tng ti cc v tr khc nhau trn mn hnh hin th, ng thi, bng cch thay i kch thc ca vng quan st, chng ta c th thay i kch thc v tnh cn xng ca cc i tng c hin th. Chng ta c th thc hin cc hiu ng thu phng bng cch nh x cc ca s c kch thc khc nhau vo vng quan st c kch thc c nh. Khi cc ca s c thu nh, phn nm trong ca s s c phng to gip chng ta d dng quan st cc chi tit m khng th thy c trong cc ca s ln hn.1.2. H ta quan st v h ta thit b chun
1.2.1. H ta quan st
thit lp h ta quan st, trc tin ta s chn mt im P0(x0, y0) trong h ta th gii thc lm gc ta .
Sau chng ta s s dng mt vector V m t hng quan st nh hng cho trc tung yv ca h ta . Vector V c gi l view-up vector.
T V chng ta c th tnh c cc vector n v v = (vxvy ) v u = (ux,uy ) tng ng cho cc trc tung yv v trc honh xvca h ta . Cc vector n v ny s c dng to thnh hai dng u tin ca ma trn quay MR a cc trc xv yv trng vi cc trc xw ywca h trc ta th gii thc.
Ma trn ca php chuyn mt im trong h ta th gii thc sang h ta quan st l tch ca hai ma trn ca cc php bin i : php tnh tin gc ta h quan st v gc ta h ta th gii thc, php quay a cc trc ca h ta
quan st trng vi cc trc ca h ta th gii thc. MWC,VC =MTMR1.2.2. H ta thit b chun
Do cch nh ngha ca cc h ta thit b khc nhau nn mt hnh nh hin th c trn thit b ny cha chc hin th chnh xc trn thit b kia. Chnh v vy cn phi xy dng h ta thit b chun i din chung cho cc thit b c th m t cc hnh nh ca th gii thc m khng ph thuc vo bt c thit b no.
Trong h ta ny, cc ta x, y s c gn cc gi tr trong khong t 0 n 1.
Nh vy, vng khng gian ca h ta thit b chun chnh l hnh vung n v c gc
tri di l (0,0) v gc phi trn (1,1).
H ta thit b chun1.3. Cc thut ton xn hnh
Thao tc loi b cc phn hnh nh nm ngoi mt vng cho trc c gi l xn hnh. Vng c dng xn hnh gi l ca s xn (clip window).
Ty thuc vo tng ng dng c th m ca s xn c th c dng l a gic hay l ng cong khp kn. n gin, trong cc thut ton xn hnh, ca s xn c gi l ca s.
II. Thut ton Cohen-Sutherlandy l mt trong nhng thut ton ra i sm nht v thng dng nht.
Bng cch ko di cc bin ca ca s, ngi ta chia mt phng thnh chn vng gm ca s v tm vng xung quanh n.
Khi nim m vng (area code)
Mt con s 4 bit nh phn gi l m vng s c gn cho mi vng m t v tr tng i ca vng so vi ca s. Bng cch nh s t 1 n 4 theo th t t phi qua tri, cc bit ca m vng c dng theo quy c sau ch mt trong bn v tr tng i ca vng so vi ca s bao gm : tri, phi, trn, di.
Bit 1 : tri (LEFT)
Bit 2 : phi (RIGHT)
Bit 3 : trn (TOP)
Bit 4 : di (BOTTOM)
Gi tr 1 tng ng vi v tr bit no trong m vng s ch ra rng im v
tr tng ng, ngc li bit s c t bng 0. V d mt vng c m l 1001, th n s nm pha di (bit 4 bng 1), bn tri (bit 1 bng 1) so vi ca s, vng c m l 0000 chnh l ca s.
Cc gi tr bit trong m vng c tnh bng cch xc nh ta ca im (x, y) thuc vng vi cc bin ca ca s.
Bit 1 c t l 1 nu x < xmin, cc bit khc c tnh tng t.III. Thut ton xn a gic vo hnh ch nht v cc ln bin i Chng ta c th hiu chnh cc thut ton xn on thng xn a gic bng cch xem a gic nh l mt tp cc on thng lin tip ni vi nhau. Tuy nhin, kt qu sau khi xn nhiu khi li l tp cc on thng ri nhau. iu chng ta mongmun y l kt qu sau khi xn phi l mt cc a gic sau ny c th chuyn thnh cc vng t.
Kt qu sau khi xn a gic ban u. a gic ban u (a). Kt qu l cc on ri nhau (b) v kt qu l cc a gic (c) Trong phn ny chng ta s kho st mt trong cc thut ton xn a gic l thut ton Sutherland-Hodgeman.
Thut ton ny s tin hnh xn a gic ln lt vi cc bin ca s. u tin, a gic s c xn dc theo bin tri ca ca s, kt qu sau bc ny s c dng xn tip bin phi, ri c tng t nh vy cho cc bin trn, di. Sau khi xn ht vi bn bin ca ca s, ta c kt qu cui cng.
Vi mi ln xn a gic dc theo mt bin no ca ca s, nu gi Vi,Vi+1 l hai nh k cnh ViVi+1, ta c 4 trng hp c th xy ra khi xt tng cp nh ca a gic ban u vi bin ca ca s nh sau:
i) Nu Vi nm ngoi, Vi+1 nm trong, ta lu giao im I ca ViVi+1vi bin ca ca s v Vi+1 ii) Nu c Vi, Vi+1u nm trong, ta s lu c Vi, Vi+1 iii) Nu Vinm trong, Vi+1nm ngoi, ta s lu Vi v I.
iiii) Nu c Vi, Vi+1u nm ngoi, ta khng lu g c
Cc trng hp khi xt Vi,Vi+1vi cc bin ca ca s
IV. CoDe Thut Ton Xn a Gic Vo Hnh Ch Nht.
# include
# include
# include
# include
class PointCoordinates
{
public:
float x;
float y;
PointCoordinates( )
{
x=0;
y=0;
}
};
class LineCoordinates
{
public:
float x_1;
float y_1;
float x_2;
float y_2;
LineCoordinates( )
{
x_1=0;
y_1=0;
x_2=0;
y_2=0;
}
LineCoordinates(const float x1,const float y1,const float x2,const float y2)
{
x_1=x1;
y_1=y1;
x_2=x2;
y_2=y2;
}
};
class RectangularCoordinates
{
public:
float x_min;
float y_min;
float x_max;
float y_max;
RectangularCoordinates(const float x1,const float y1,const float x2,const float y2)
{
x_min=x1;
y_min=y1;
x_max=x2;
y_max=y2;
}
};
void show_screen( );
void apply_window_to_viewport_coordinate_transformation(const RectangularCoordinates,const RectangularCoordinates,int &,int &);
void clip_polygon(const RectangularCoordinates,const int,const int []);
const int check_line(const LineCoordinates,const LineCoordinates);
const int check_point(const LineCoordinates,const float,const float);
const PointCoordinates get_intersection_point(LineCoordinates,LineCoordinates);
void Polygon(const int,const int []);
void Rectangle(const int,const int,const int,const int);
void Line(const int,const int,const int,const int);
void Dashed_line(const int,const int,const int,const int,const int=0);
int main( )
{
int driver=VGA;
int mode=VGAHI;
initgraph(&driver,&mode,"");
show_screen( );
setcolor(15);
Line(90,150,90,390);
Line(50,350,320,350);
Line(400,150,400,390);
Line(360,350,580,350);
RectangularCoordinates WC(130,180,290,300);
RectangularCoordinates VC(440,230,550,300);
setcolor(15);
Line(90,180,95,180);
Line(90,300,95,300);
Line(130,345,130,350);
Line(290,345,290,350);
Line(400,230,405,230);
Line(400,300,405,300);
Line(440,345,440,350);
Line(550,345,550,350);
setcolor(15);
Rectangle(WC.x_min,WC.y_min,WC.x_max,WC.y_max);
Rectangle(VC.x_min,VC.y_min,VC.x_max,VC.y_max);
int n=8;
int polygon_vertices[18]={ 60,320 , 320,320 , 250,190 , 235,210 ,230,195 , 215,220 , 200,200 , 60,320 };
setcolor(7);
Polygon(n,polygon_vertices);
setcolor(15);
settextstyle(0,0,1);
outtextxy(50,175,"YW");
outtextxy(50,295,"YW");
outtextxy(110,360,"XW");
outtextxy(280,360,"XW");
outtextxy(360,225,"YV");
outtextxy(360,295,"YV");
outtextxy(420,360,"XV");
outtextxy(530,360,"XV");
outtextxy(182,170,"Window");
outtextxy(140,390,"");
outtextxy(462,220,"Viewport");
outtextxy(420,390,"");
settextstyle(2,0,4);
outtextxy(67,175,"min");
outtextxy(67,295,"max");
outtextxy(127,360,"min");
outtextxy(297,360,"max");
outtextxy(377,225,"min");
outtextxy(377,295,"max");
outtextxy(437,360,"min");
outtextxy(547,360,"max");
char Key=NULL;
do
{
Key=getch( );
}
while(Key!='T' && Key!='t');
settextstyle(0,0,1);
setcolor(0);
outtextxy(90,450," XIN CHAN THANH CAM ON ");
setcolor(15);
outtextxy(85,450,"---------------- -----------------");
setcolor(12);
outtextxy(213,450," ");
for(int count=0;count