#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
class Circle
{
int XCoord;
int YCoord;
int Radius;
void PlotPoint(int,int,int);
public:
Circle()
{
XCoord=0;
YCoord=0;
Radius=0;
}
Circle(int x, int y, int z)
{
XCoord=x;
YCoord=y;
Radius=z;
}
void CircleMidpoint();
void InitGraphs();
void BoundryFill(int,int,int,int);
void BoundryFillRound();
};
void Circle :: InitGraphs()
{
int gMode, gDriver=DETECT;
int errorcode;
initgraph(&gDriver,&gMode,"c:\\tc\\bgi");
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
cout<<"Graphics error: "<< grapherrormsg(errorcode);
cout<<"Press any key to halt:";
getch();
exit(1); /* return with error code */
}
setbkcolor(3);
}
void Circle :: PlotPoint(int x,int y,int z)
{
putpixel(XCoord+x,YCoord+y,z);
putpixel(XCoord-x,YCoord+y,z);
putpixel(XCoord+x,YCoord-y,z);
putpixel(XCoord-x,YCoord-y,z);
putpixel(XCoord+y,YCoord+x,z);
putpixel(XCoord-y,YCoord+x,z);
putpixel(XCoord+y,YCoord-x,z);
putpixel(XCoord-y,YCoord-x,z);
}
void Circle :: CircleMidpoint()
{
int x,y;
int p;
x=0;
y=Radius;
PlotPoint(x,y,15);
p=1-Radius;
while(x<y)
{
if(p<0)
x+=1;
else
{
x+=1;
y-=1;
}
if(p<0)
p=p+2*x+1;
else
{
p=p + 2 *(x-y) + 1;
}
PlotPoint(x,y,15);
}
}
void Circle :: BoundryFillRound()
{
int x,y;
int p;
for(int iCntr=1;iCntr<Radius;iCntr++)
{
x=0;
y=iCntr;
PlotPoint(x,y,5);
p=1-iCntr;
while(x<y)
{
if(p<0)
x+=1;
else
{
x+=1;
y-=1;
}
if(p<0)
p=p+2*x+1;
else
{
p=p + 2 *(x-y) + 1;
}
PlotPoint(x,y,5);
}
// sleep(1);
}
}
void Circle :: BoundryFill(int x, int y,int fill,int bound)
{
int cur;
cur=getpixel(x,y);
if(cur!=bound && cur!= fill)
{
putpixel(x,y,fill);
Circle :: BoundryFill(x+1, y,fill,bound);
Circle :: BoundryFill(x-1, y,fill,bound);
Circle :: BoundryFill(x, y-1,fill,bound);
Circle :: BoundryFill(x, y+1,fill,bound);
Circle :: BoundryFill(x+1, y+1,fill,bound);
Circle :: BoundryFill(x+1, y+1,fill,bound);
Circle :: BoundryFill(x-1, y-1,fill,bound);
Circle :: BoundryFill(x-1, y+1,fill,bound);
}
}
void main()
{
Circle cObj(250,250,42);
cObj.InitGraphs();
cObj.CircleMidpoint();
cObj.BoundryFillRound();
//cObj.BoundryFill(250,250,11,15);
getch();
closegraph();
}