Polygon Filling
1.Non recursive Seed Fill/Flood Fill
Flood Filling Algorithm 8 connected
FLOOD FILL USING 4 Connected Region
1.Non recursive Seed Fill/Flood Fill
Flood Filling Algorithm 8 connected
/* FloodFill of Polygon with eight connected region */ #include<stdio.h> #include<graphics.h> void main() {int gd,gm; /* Initialise graphics mode ---------------------------------- */ detectgraph(&gd,&gm); initgraph(&gd,&gm,"C:\\TC\\bgi"); rectangle(50,50,100,100); flood(55,55,4,15); getch(); closegraph(); } flood(seed_x,seed_y,foreground_col,background_col) { if (getpixel(seed_x,seed_y)!= background_col && getpixel(seed_x,seed_y)!= foreground_col) { putpixel(seed_x,seed_y,foreground_col); flood(seed_x+1,seed_y,foreground_col,background_col); flood(seed_x-1,seed_y,foreground_col,background_col); flood(seed_x,seed_y+1,foreground_col,background_col); flood(seed_x,seed_y-1,foreground_col,background_col); flood(seed_x+1,seed_y+1,foreground_col,background_col); flood(seed_x-1,seed_y-1,foreground_col,background_col); flood(seed_x+1,seed_y-1,foreground_col,background_col); flood(seed_x-1,seed_y+1,foreground_col,background_col); } return 0; }
FLOOD FILL USING 4 Connected Region
#include<stdio.h> #include<graphics.h> void main() { int gd,gm; /* Initialise graphics mode ---------------------------------- */ detectgraph(&gd,&gm); initgraph(&gd,&gm,"C:\\TC\\bgi"); rectangle(50,50,100,100); flood(55,55,4,15); getch(); closegraph(); } flood(seed_x,seed_y,foreground_col,background_col) { if (getpixel(seed_x,seed_y)!= background_col && getpixel(seed_x,seed_y)!= foreground_col) { putpixel(seed_x,seed_y,foreground_col); delay(1); flood(seed_x+1,seed_y,foreground_col,background_col); delay(1); flood(seed_x-1,seed_y,foreground_col,background_col); delay(1); flood(seed_x,seed_y+1,foreground_col,background_col); delay(1); flood(seed_x,seed_y-1,foreground_col,background_col); delay(1); } return 0; }2.Scan Line Algorithm
#include <stdio.h> #include <conio.h> #include <graphics.h> main() { int n,i,j,k,gd,gm,dy,dx; //variable declaration int x,y,temp; int a[20][2],xi[20]; //2D arrary declaration for a.. 20 is the max size. float slope[20]; //1D array declaration for slope clrscr(); printf("\n\n\tEnter the no. of edges of polygon : "); scanf("%d",&n); printf("\n\n\tEnter the cordinates of polygon :\n\n\n "); for(i=0;i<n;i++) { printf("\t X=%d Y=%d : ",i,i); //accepting cordinates scanf("%d %d",&a[i][0],&a[i][1]); } a[n][0]=a[0][0]; //assign a[0][0] value to a[n][0] a[n][1]=a[0][1]; //assign a[0][1] value to a[n][1] detectgraph(&gd,&gm); initgraph(&gd,&gm,"c:\\tc\\bgi"); /*- draw polygon -*/ for(i=0;i<n;i++) { line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]); //draw lines } getch(); for(i=0;i<n;i++) { dy=a[i+1][1]-a[i][1]; // suppose dy=y2-y1 dx=a[i+1][0]-a[i][0]; //suppose dx=x2-x1 if(dy==0) slope[i]=1.0; if(dx==0) slope[i]=0.0; if((dy!=0)&&(dx!=0)) /*- calculate inverse slope -*/ { slope[i]=(float) dx/dy; // typecast to float } } for(y=0;y< 480;y++) // maximum range of y length resolution is 480 { k=0; for(i=0;i<n;i++) { if( ((a[i][1]<=y)&&(a[i+1][1]>y))|| //check value is greater or less than y ((a[i][1]>y)&&(a[i+1][1]<=y))) { xi[k]=(int)(a[i][0]+slope[i]*(y-a[i][1])); // find x value array using this formula k++; } } for(j=0;j<k-1;j++) /*- Arrange x-intersections in order -*/ for(i=0;i<k-1;i++) { if(xi[i]>xi[i+1]) //sort x intersection in xi[k] in order using swapping { temp=xi[i]; xi[i]=xi[i+1]; xi[i+1]=temp; } } setcolor(35); for(i=0;i<k;i+=2) // draw lines to fill polygon { line(xi[i],y,xi[i+1],y); getch(); } } return 0; }
Comments
Post a Comment