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

Upload: freeloadtailieu

Post on 09-Nov-2015

125 views

Category:

Documents


10 download

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

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