The document describes an algorithm for coloring polygons. It discusses:
- Defining polygons based on closed boundary lines
- Two types of polygons: solid fill or pattern fill
- The coloring process involves determining edge intersections and assigning colors
- Two main coloring methods: scanline fill and boundary fill
- Scanline fill works by determining edge intersections with the scanline and coloring segments between intersections
- Boundary fill starts from an interior point and floods color outwards until reaching an edge
The document describes an algorithm for coloring polygons. It discusses:
- Defining polygons based on closed boundary lines
- Two types of polygons: solid fill or pattern fill
- The coloring process involves determining edge intersections and assigning colors
- Two main coloring methods: scanline fill and boundary fill
- Scanline fill works by determining edge intersections with the scanline and coloring segments between intersections
- Boundary fill starts from an interior point and floods color outwards until reaching an edge
The document describes an algorithm for coloring polygons. It discusses:
- Defining polygons based on closed boundary lines
- Two types of polygons: solid fill or pattern fill
- The coloring process involves determining edge intersections and assigning colors
- Two main coloring methods: scanline fill and boundary fill
- Scanline fill works by determining edge intersections with the scanline and coloring segments between intersections
- Boundary fill starts from an interior point and floods color outwards until reaching an edge
c cc c c cc c t tt t t tt t h hh h h hh h u uu u u uu u a aa a a aa a
t tt t t tt t t tt t t tt t o oo o o oo o a aa a a aa a
n nn n n nn n t tt t t tt t o oo o o oo o
m mm m m mm m a aa a a aa a
u uu u u uu u D Da a n n n nh ha a p p Mot vung t ot hng c xac nh bi mot ng khep kn nao ogoi l ang bi en. Dang ng bi en n gi an t hng gap l aa gi ac. Cohai dang vung t ot hng gap : t obang mot mau t huan nhat (sol i d fi l l ) vat ot heo mot mau t o(fi l l - pat t er n) nao o. Vi ec t omau t hng c chi a l am hai cong oan : Xac nh vt r cac i em can t omau. Quyet nh t ocac i em t r en bang mau nao. Cong oan nay t hc s phc t ap khi t a can t ot heo mot mau t onao ochkhong phai t ot huan mot mau. Cohai cach t i ep can chnh : t omau t heo dong quet vat omau da t heo ng bi en. Phng phap t omau da t heo dong quet sexac nh phan gi ao cua cac dong quet ket i ep nhau vi ng bi en cua vung t o, sau oset i en hanh t omau cac i em t huoc phan gi ao nay. Cach nay t hng c dung et omau a gi ac, ng t r on, el l i pse vamot song cong n gi an khac. Phng phap t omau da t heo ng bi en sebat au t mot i em ben t r ong vung t ovat ol oang dan r a cho en khi gap i em bi en. Cach nay t hng c dung cho cac dang ng bi en phc t ap. OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 2/ 16 T TT T T TT T h hh h h hh h u uu u u uu u a aa a a aa a
t tt t t tt t t tt t t tt t o oo o o oo o a aa a a aa a
n nn n n nn n t tt t t tt t o oo o o oo o
t tt t t tt t h hh h h hh h e ee e e ee e o oo o o oo o d dd d d dd d o oo o o oo o
n nn n n nn n g gg g g gg g q qq q q qq q u uu u u uu u e ee e e ee e
t tt t t tt t Bai t oan at r a : Can t omau mot a gi ac cho bi N nh ( ) 1 ,... 0 , , = N i y x P i i i . a gi ac nay cot hel aa gi ac l oi , a gi ac l om, vacaa gi ac t cat , T To o m m t t a a t t c ca a c c b b c c c ch h n nh h c cu u a a t t h hu ua a t t t t o oa a n n Tm t op y , bot t om y l an l t l agi at r l n nhat , nho nhat cua t ap cac t ung ocua cac nh cua a gi ac a cho: ( ) { } P y x y y i i i t op = , , max , ( ) { } P y x y y i i i bot t om = , , mi n . ng vi moi dong quet k y = , vi k t hay oi t bot t om y en t op y , l ap : Tm t at cacac hoanh ogi ao i em cua dong quet k y = vi cac canh cua a gi ac. Sap xep cac hoanh ogi ao i em t heo t ht t ang dan : ,..., , , 2 1 0 x x x Tomau cac oan t hang t r en ng t hang k y = l an l t c gi i han bi cac cap ( ) ( ) ( ) 1 2 2 2 1 1 0 , ,..., , , , + k k x x x x x x . O y 0 1 2 3 x y bottom y top OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 3/ 16 C Ca a c c v va a n n e e a a t t r r a a Han chec socanh can t m gi ao i em ng vi moi dong quet v ng vi moi dong quet , khong phai l uc nao t at cacac canh cua a gi ac cung t ham gi a cat dong quet . Xac nh nhanh hoanh ogi ao i em v neu l ap l ai t hao t ac t m gi ao i em cua canh a gi ac vi moi dong quet bang cach gi ai hephng t r nh set on r at nhi eu t hi gi an. Gi ai quyet t r ng hp sogi ao i em ng vi t r ng hp dong quet i ngang qua nh : Neu sogi ao i em t m c gi a cac canh a gi ac vadong quet l al et h vi ec nhom t ng cap gi ao i em ket i ep nhau ehnh t hanh cac oan t ocot hesekhong chnh xac. i eu nay chxay r a khi dong quet i ngang qua cac nh cua a gi ac. Ngoai r a, vi ec t m gi ao i em cua dong quet vi cac canh nam ngang l amot t r ng hp ac bi et can phai cocach xl t hch hp y=k 1 y=k 2 0 1,2 3 4 0 1,2 3 OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 4/ 16 T To o c ch h c c c ca a u u t t r r u u c c d d l l i i e e u u v va a t t h hu ua a t t t t o oa a n n Danh sach cac canh (Edge Tabl e ET) : cha t oan bocac canh cua a gi ac (al oai i cac canh nam ngang) c sap t heo t ht t ang dan cua Mi n y . Danh sach cac canh kch hoat (Act i ve Edge Tabl e AET) : cha cac canh cua a gi ac cot hecat ng vi dong quet hi en hanh, cac canh nay c sap t heo t ht t ang dan cua hoanh ogi ao i em gi a canh vadong quet . Khi dong quet i t bot t om en t op, cac canh t hoa i eu ki en sec di chuyen t ET sang AET: Khi dong quet k y = bat au cat mot canh, ngha l a Mi n y k , canh nay sec chuyen t ET sang AET. Khi dong quet khong con cat canh nay na, ngha l a Max y k > , canh nay sebl oai r a khoi AET. Khi khong con canh nao t r ong ET hay AET na, qua t r nh t omau ket t huc. et m gi ao i em gi a canh a gi ac vadong quet hi en hanh nhanh, t a conhan xet : ( ) ( ) m k k m x x k k 1 1 1 1 = + = + hay m x x k k 1 1 + = + . y=k+1 y=k x k x k+1 OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 5/ 16 e e x xu ua a t t c ca a u u t t r r u u c c d d l l i i e e u u c cu u a a m mo o t t c ca a n nh h ( (E ED DG GE E) ) Mi n y : gi at r t ung onhonhat t r ong 2 nh cua canh.
t xInter sec : hoanh ogi ao i em cua canh vi dong quet hi en hanh.
DxPerScan : gi at r 1/m (m l ahesogoc cua canh).
deltaY : khoang cach t dong quet hi en hanh t i nh Max y . Luc nay i eu ki en Max y k > t r t hanh 0 deltaY . Gi at r t xInter sec c khi gan ban au l ahoanh o cua nh cot ung ol a Mi n y , vagi at r deltaY c khi gan ban au l a 1 + Min Max y y . yMin xIntersect y=k deltaY OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 6/ 16 G Gi i a a i i q qu uy ye e t t t t r r n ng g h h p p d do o n ng g q qu ue e t t i i q qu ua a n nh h Tnh mot gi ao i em neu chi eu cua hai canh kecua nh ocoxu hng t ang hay gi am. Tnh hai gi ao i em neu chi eu cua hai canh kecua nh ocoxu hng t hay oi , ngha l at ang-gi am hay gi am-t ang. Khi cai at ekhoi phai xet i eu ki en nay cho phc t ap, khi xay dng dl i eu cho moi canh t r c khi a vao ET, ngi t a sexl cac canh conh t nh hai gi ao i em bang cach l oai i mot pi xel t r en cung cua mot t r ong hai canh. (a) (b) P i P i-1 P i+1 P i P i-1 P i+1 P i-1 P i-1 P i+1 P i+1 P i P i y=k P i-1 P i P i+1 y=k-1 P i+1 y=k P i+1 P i P i-1 y=k-1 P i-1 P i * P i * P i-1 P i+1 OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 7/ 16 M Mi i n nh h h ho o a a t t h hu ua a t t t t o oa a n n Ban au : ET : AB*, AI, H*G, BC, G*F, DC, EF. (loai IH vaDE) AET : NULL. Khi dong quet at y=y A ET : H*G, BC, G*F, DC, EF. (chuyen AB*, AI sang AET) AET : AB*, AI. Khi dong quet at y=y H* ET : BC, G*F, DC, EF. (chuyen H*G sang AET) AET : AB*, H*G. (loai AI v khong con cat dong quet) Top F E D C B G H I A Bottom y B y G* =y G +1 y B* =y B -1 y G y H* =y H +1 y H OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 8/ 16 Khi dong quet at y=y B ET : G*F, DC, EF. (chuyen BC sang AET) AET : BC, H*G. (loai AB*, sap xep lai H*G vaBC) Khi dong quet at y=y G* ET : DC, EF. (chuyen G*F sang AET) AET : BC, G*F. (loai H*G v khong con cat dong quet) Khi dong quet at y=y D ET : NULL. (chuyen DC, EF sang AET) AET : BC, DC, EF, G*F. (sap xep lai BC, GF*, DC, EF) Khi dong quet at y=y C +1 ET : NULL. AET : EF, G*F. (loai BC, DC v khong con cat dong quet) Khi dong quet at y=y F +1 ET : NULL. AET : NULL. (loai EF, G*F v khong con cat dong quet). Thuat t oan dng t ai ay. OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 9/ 16 Lu othuat toan tomau theo dong quet Begin Tao danh sac h tat c ac ac c anh ET i<TopScan i=BottomScan Yes No Cap nhat danh sac h c ac c anh kc h hoat AET Tm hoanh ogiao iem vasap xep theo thttang dan Tomau c ac oan giao c tao bi tng c ap hoanh oketiep nhau Cap nhat lai thong tin c ua c ac c anh esdung c ho dong quet ketiep i=i+1 End OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 10/ 16 M Mo o t t s so o h h n ng g d da a n n c ca a i i a a t t #define MAXVERTEX 20 #define MAXEDGE 20 #define TRUE 1 #define FALSE 0 typedef struct { int x; int y; }POINT; typedef struct{ int NumVertex; POINT aVertex[MAXVERTEX]; }POLYGON; typedef struct { int NumPt; float xPt[MAXEDGE]; }XINTERSECT; typedef struct { int yMin; // Gia tri y nho nhat cua 2 dinh float xIntersect; // Hoanh do giao diem cua canh & dong quet float dxPerScan; // Gia tri 1/m int DeltaY; }EDGE; typedef struct { int NumEdge; EDGE aEdge[MAXEDGE]; }EDGELIST; OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 11/ 16 void PutEdgeInList(EDGELIST &EdgeList, POINT p1, POINT p2, int NextY) { EDGE EdgeTmp; EdgeTmp.dxPerScan = float(p2.x-p1.x)/(p2.y-p1.y); // 1/m if(p1.y < p2.y) { /* Truong hop dong quet di ngang qua dinh la giao diem cua 2 canh co huong y cung tang */ if(p2.y < NextY) { p2.y--; p2.x -= EdgeTmp.dxPerScan; } EdgeTmp.yMin = p1.y; EdgeTmp.xIntersect= p1.x; EdgeTmp.DeltaY = abs(p2.y-p1.y)+1; } // if else { /* Truong hop dong quet di ngang qua dinh la giao diem cua 2 canh co huong y cung giam */ if(p2.y > NextY) { p2.y++; p2.x+= EdgeTmp.dxPerScan; } EdgeTmp.yMin = p2.y; EdgeTmp.xIntersect= p2.x; EdgeTmp.DeltaY = abs(p2.y-p1.y)+1; }//else // xac dinh vi tri chen int j = EdgeList.NumEdge; while((j>0) && (EdgeList.aEdge[j-1].yMin>EdgeTmp.yMin)) { EdgeList.aEdge[j] = EdgeList.aEdge[j-1]; j--; } // tien hanh chen dinh moi vao canh EdgeList.NumEdge++; EdgeList.aEdge[j] = EdgeTmp; } // PutEdgeInList OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 12/ 16 /* Tim dinh ke tiep sao cho khong nam tren cung duong thang voi dinh dang xet */ int FindNextY(POLYGON P, int id) { int j = (id+1)%P.NumVertex; while((j<P.NumVertex)&&(P.aVertex[id].y == P.aVertex[j].y)) j++; if(j<P.NumVertex) return (P.aVertex[j].y); return 0; } // FindNextY // Tao danh sach cac canh tu polygon da cho void MakeSortedEdge(POLYGON P, EDGELIST &EdgeList, int &TopScan, int &BottomScan) { TopScan = BottomScan = P.aVertex[0].y; EdgeList.NumEdge = 0; for(int i=0; i<P.NumVertex; i++) { // Truong hop canh khong phai la canh nam ngang if(P.aVertex[i].y != P.aVertex[i+1].y) PutEdgeInList(EdgeList, P.aVertex[i], P.aVertex[i+1], FindNextY(P, i+1)); // Xu li truong hop canh nam ngang else if(P.aVertex[i+1].y > TopScan) TopScan = P.aVertex[i+1].y; } BottomScan = EdgeList.aEdge[0].yMin; } //MakeSortedEdge // Cap nhat lai hai con tro FirstId, LastId cho biet danhsach cac canh active void UpdateActi veEdgeList(EDGELIST EdgeList, int yScan, int &FirstId, int &LastId) { while((FirstId<EdgeList.NumEdge-1) &&(EdgeList.aEdge[FirstId].DeltaY == 0)) FirstId++; while((LastId<EdgeList.NumEdge-1) &&(EdgeList.aEdge[LastId+1].yMin<=yScan)) LastId++; } // UpdateActiveEdgeList OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 13/ 16 T TT T T TT T h hh h h hh h u uu u u uu u a aa a a aa a
t tt t t tt t t tt t t tt t o oo o o oo o a aa a a aa a
n nn n n nn n t tt t t tt t o oo o o oo o
m mm m m mm m a aa a a aa a
u uu u u uu u t tt t t tt t h hh h h hh h e ee e e ee e o oo o o oo o
n nn n n nn n g gg g g gg g b bb b b bb b i ii i i ii i e ee e e ee e
n nn n n nn n Bai t oan at r a : Can t omau vung t oneu bi et c mau cua ng bi en vung t ovamot i em nam ben t r ong vung t o. Yt ng : Bat au t i em nam ben t r ong vung t o, ki em t r a cac i em l an can cua noac t ohay co phai l ai em comau t r ung mau bi en hay khong, neu khong phai t h t a set oi em o. Quat r nh nay c l ap l ai cho t i khi khong con t oc na t h dng. OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 14/ 16 Cohai quan i em vecach t onay, ol adung 4 i em l an can (hnh a) hay 8 i em l an can (hnh b). Cai at mi nh hoa t huat t oan t omau t heo ng bi en void BoundaryFill(int x, int y, int FillColor, int BoundaryColor) { int CurrenColor; CurrentColor = getpixel(x,y); if((CurrentColor!=BoundaryColor)&&CurrentColor!= FillColor)) { putpixel(x,y,FillColor); BoundaryFill(x-1, y, FillColor, BoundaryColor); BoundaryFill(x, y+1, FillColor, BoundaryColor); BoundaryFill(x+1, y, FillColor, BoundaryColor); BoundaryFill(x, y-1, FillColor, BoundaryColor); } } // Boundary Fill Mot sonhan xet Thuat t oan cot hehoat ong khong chnh xac khi comot soi em nam t r ong vung t ocomau l amau can t ocua vung. Vi ec t hc hi en equi l am t huat t oan khong t hedung cho vung t ol n. (a) (b) OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 15/ 16 Mot cai t i en nho: nhan xet r ang vi ec goi t hc hi en equi t huat t oan cho 4 i em l an can cua i em hi en hanh khong quan t am t i mot t r ong 4 i em oa c xet bc t r c hay cha. V du khi t a xet 4 i em l an can cua (x, y), t h khi goi t hc hi en equi vi i em hi en hanh l amot t r ong 4 i em t r en, (x, y) van c xem l ai em l an can cua chung vac goi t hc hi en l ai . void BoundaryFillEnhanced(int x, int y, int F_Color, int B_Color) { int CurrenColor; CurrentColor = getpixel(x,y); if((CurrentColor!=B_Color)&&CurrentColor!= F_Color)) { putpixel(x,y,F_Color); FillLeft(x-1, y, F_Color, B_Color); FillTop(x, y+1, F_Color, B_Color); FillRight(x+1, y, F_Color, B_Color); FillBottom(x, y-1, F_Color, B_Color); } } // BoundaryFillEnhanced void FillLeft(int x, int y, int F_Color, int B_Color) { int CurrenColor; CurrentColor = getpixel(x,y); if((CurrentColor!=B_Color)&&CurrentColor!= F_Color)) { putpixel(x,y,F_Color); FillLeft(x-1, y, F_Color, B_Color); FillTop(x, y+1, F_Color, B_Color); FillBottom(x, y-1, F_Color, B_Color); } } // FillLeft OHOA MAY TNH Dng Anh c, Lenh Duy Cac thuat toan tomau 16/ 16 Mot cai t i en khac : khong cai at equi mat ot heo t ng dong.