Boundary and Flood Fill Algorithms
Write a program for Boundary and Flood Fill Algorithms in C++ Language . Boundary and Flood Fill Algorithms in C++ should accept the coordinates for polygon.
- INPUT
- FLOOD FILL
- BOUNDARY FILL
- EXIT
After selecting Boundary and Flood fill algorithm option , It must fill polygon by both algorithms.
Boundary and Flood Fill Algorithms Code
1 |
#include <br/> #include <br/> #include <br/> #include <br/> #define max 100000 <br/> class fill <br/> { <br/> int edge,a[50],sx,sy,midx,midy; <br/> public: <br/> void input() <br/> { <br/> cout<<"\nENTER NO OF EDGES:"; <br/> cin>>edge; <br/> int j=0; <br/> for(int i=0;i<edge;i++) <br=""> { <br/> cout<<"\nENTER THE X"<<i+1<<"coordinate:"; <br=""> cin>>a[j++]; <br/> cout<<"\nENTER THE Y"<<i+1<<"coordinate:"; <br=""> cin>>a[j++]; <br/> } <br/> } <br/> void b_fill(int x,int y,int clr) <br/> { <br/> int j=0; <br/> midx=getmaxx()/2; <br/> midy=getmaxy()/2; <br/> setcolor(WHITE); <br/> line(0,midy,2*midx,midy); <br/> line(midx,0,midx,2*midy); <br/> setcolor(RED); <br/> for(int i=0;i<edge;i++) <br=""> { <br/> if(edge-i!=1) <br/> line(a[j]+midx,midy-a[j+1],a[j+2]+midx,midy-a[j+3]); <br/> else <br/> line(a[j]+midx,midy-a[j+1],a[0]+midx,midy-a[1]); <br/> j=j+2; <br/> } <br/> getch(); <br/> int st[max][2],top=-1; <br/> x=midx+x; <br/> y=midy-y; <br/> st[++top][0]=x; <br/> st[top][1]=y; <br/> while(top!=-1) <br/> { <br/> x=st[top][0]; <br/> y=st[top][1]; <br/> top--; <br/> if((getpixel(x+1,y)!=clr)&&(getpixel(x+1,y)!=RED)) <br/> { <br/> putpixel(x+1,y,clr); <br/> st[++top][0]=x+1; <br/> st[top][1]=y; <br/> } <br/> if((getpixel(x-1,y)!=clr)&&(getpixel(x-1,y)!=RED)) <br/> { <br/> putpixel(x-1,y,clr); <br/> st[++top][0]=x-1; <br/> st[top][1]=y; <br/> } <br/> if((getpixel(x,y+1)!=clr)&&(getpixel(x,y+1)!=RED)) <br/> { <br/> putpixel(x,y+1,clr); <br/> st[++top][0]=x; <br/> st[top][1]=y+1; <br/> } <br/> if((getpixel(x,y-1)!=clr)&&(getpixel(x,y-1)!=RED)) <br/> { <br/> putpixel(x,y-1,clr); <br/> st[++top][0]=x; <br/> st[top][1]=y-1; <br/> } <br/> } <br/> } <br/> void f_fill(int x,int y,int clr) <br/> { <br/> int j=0; <br/> midx=getmaxx()/2; <br/> midy=getmaxy()/2; <br/> setcolor(WHITE); <br/> line(0,midy,2*midx,midy); <br/> line(midx,0,midx,2*midy); <br/> setcolor(RED); <br/> for(int i=0;i<edge;i++) <br=""> { <br/> if(edge-i!=1) <br/> line(a[j]+midx,midy-a[j+1],a[j+2]+midx,midy-a[j+3]); <br/> else <br/> line(a[j]+midx,midy-a[j+1],a[0]+midx,midy-a[1]); <br/> j=j+2; <br/> } <br/> getch(); <br/> int st[max][2],top=-1; <br/> x=midx+x; <br/> y=midy-y; <br/> st[++top][0]=x; <br/> st[top][1]=y; <br/> putpixel(x,y,col); <br/> while(top!=-1) <br/> { <br/> x=st[top][0]; <br/> y=st[top][1]; <br/> top--; <br/> if((getpixel(x+1,y)!=clr)&&(getpixel(x+1,y)==7)) <br/> { <br/> putpixel(x+1,y,clr); <br/> st[++top][0]=x+1; <br/> st[top][1]=y; <br/> } <br/> if((getpixel(x-1,y)!=clr)&&(getpixel(x-1,y)==7)) <br/> { <br/> putpixel(x-1,y,clr); <br/> st[++top][0]=x-1; <br/> st[top][1]=y; <br/> } <br/> if((getpixel(x,y+1)!=clr)&&(getpixel(x,y+1)==7)) <br/> { <br/> putpixel(x,y+1,clr); <br/> st[++top][0]=x; <br/> st[top][1]=y+1; <br/> } <br/> if((getpixel(x,y-1)!=clr)&&(getpixel(x,y-1)==7)) <br/> { <br/> putpixel(x,y-1,clr); <br/> st[++top][0]=x; <br/> st[top][1]=y-1; <br/> } <br/> } <br/> } <br/> }; <br/> void menu() <br/> { <br/> clrscr(); <br/> cout<<"\n\t##### MAIN MENU #####"; <br/> cout<<"\n\t1.INPUT"; <br/> cout<<"\n\t2.FLOOD FILL"; <br/> cout<<"\n\t3.BOUNDARY FILL"; <br/> cout<<"\n\t4.EXIT"; <br/> cout<<"\n\tENTER UR CHOICE:"; <br/> } <br/> void main() <br/> { <br/> int gd=DETECT,gm; <br/> initgraph(&gd,&gm,"c:\\tc\\bgi"); <br/> int ch,x,y,clr; <br/> fill f; <br/> do <br/> { <br/> menu(); <br/> cin>>ch; <br/> clrscr(); <br/> switch(ch) <br/> { <br/> case 1: <br/> f.input(); <br/> break; <br/> case 2: <br/> cout<<"\n#### FLOOD FILL ####"; <br/> cout<<"\nENTER THE COLOR CODE TO FILL:"; <br/> cin>>clr; <br/> cout<<"\nENTER THE X-COORDINATE OF SEED POINT:"; <br/> cin>>x; <br/> cout<<"\nENTER THE Y-COORDINATE OF SEED POINT:"; <br/> cin>>y; <br/> f.f_fill(x,y,clr); <br/> getch(); <br/> break; <br/> case 3: <br/> cout<<"\n#### BOUNDARY FILL ####"; <br/> cout<<"\nENTER THE COLOR CODE TO FILL:"; <br/> cin>>clr; <br/> cout<<"\nENTER THE X-COORDINATE OF SEED POINT:"; <br/> cin>>x; <br/> cout<<"\nENTER THE Y-COORDINATE OF SEED POINT:"; <br/> cin>>y; <br/> f.b_fill(x,y,clr); <br/> getch(); <br/> break; <br/> case 4: <br/> break; <br/> } <br/> }while(ch!=4); <br/> } |
Source projectgeek.com