Path: blob/main/6. Scan Fill Algorithm.cpp
724 views
/*1Write C++ program to draw a concave polygon and fill it with desired color using scan fill algorithm.2*/3456#include <conio.h>7#include <iostream>8#include <graphics.h>9#include <stdlib.h>10using namespace std;1112class point13{14public:15int x,y;16};1718class poly19{20private:21point p[20];22int inter[20],x,y;23int v,xmin,ymin,xmax,ymax;24public:25int c;26void read();27void calcs();28void display();29void ints(float);30void sort(int);31};323334void poly::read()35{36int i;37cout<<"\n\t SCAN_FILL ALGORITHM";38cout<<"\n Enter the no of vertices of polygon:";39cin>>v;40if(v>2)41{42for(i=0;i<v; i++)43{44cout<<"\nEnter the co-ordinate no.- "<<i+1<<" : ";45cout<<"\n\tx"<<(i+1)<<"=";46cin>>p[i].x;47cout<<"\n\ty"<<(i+1)<<"=";48cin>>p[i].y;49}50p[i].x=p[0].x;51p[i].y=p[0].y;52xmin=xmax=p[0].x;53ymin=ymax=p[0].y;54}55else56cout<<"\n Enter valid no. of vertices.";57}5859void poly::calcs()60{ //MAX,MIN61for(int i=0;i<v;i++)62{63if(xmin>p[i].x)64xmin=p[i].x;65if(xmax<p[i].x)66xmax=p[i].x;67if(ymin>p[i].y)68ymin=p[i].y;69if(ymax<p[i].y)70ymax=p[i].y;71}72}7374void poly::display()75{76int ch1;77char ch='y';78float s,s2;79do80{81cout<<"\n\nMENU:";82cout<<"\n\n\t1 . Scan line Fill ";83cout<<"\n\n\t2 . Exit ";84cout<<"\n\nEnter your choice:";85cin>>ch1;86switch(ch1)87{88case 1:89s=ymin+0.01;90delay(100);91cleardevice();92while(s<=ymax)93{94ints(s);95sort(s);96s++;97}98break;99case 2:100exit(0);101}102103cout<<"Do you want to continue?: ";104cin>>ch;105}while(ch=='y' || ch=='Y');106}107108void poly::ints(float z)109{110int x1,x2,y1,y2,temp;111c=0;112for(int i=0;i<v;i++)113{114x1=p[i].x;115y1=p[i].y;116x2=p[i+1].x;117y2=p[i+1].y;118if(y2<y1)119{120temp=x1;121x1=x2;122x2=temp;123temp=y1;124y1=y2;125y2=temp;126}127if(z<=y2&&z>=y1)128{129if((y1-y2)==0)130x=x1;131else132{133x=((x2-x1)*(z-y1))/(y2-y1);134x=x+x1;135}136if(x<=xmax && x>=xmin)137inter[c++]=x;138}139}140}141142void poly::sort(int z)143{144int temp,j,i;145146for(i=0;i<v;i++)147{148line(p[i].x,p[i].y,p[i+1].x,p[i+1].y);149}150delay(100);151for(i=0; i<c;i+=2)152{153delay(100);154line(inter[i],z,inter[i+1],z);155}156}157158int main()159{160int cl;161initwindow(500,600);162cleardevice();163poly x;164x.read();165x.calcs();166cleardevice();167cout<<"\n\tEnter the colour u want:(0-15)->"; //Selecting colour168cin>>cl;169setcolor(cl);170x.display();171closegraph();172getch();173return 0;174}175176177