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

56
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN Đề Tài: 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 Giảng viên h ư ớng dẫn: Lớp: D8LT – CNTT6 Nhóm thực hiện : Hứa Thanh Tùng+ Dương Thị Ánh Nguyệt Thành viên trong nhóm : 1. Hứa Thanh Tùng 2. Dương Thị Ánh Nguyệt

description

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

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