#include
#include
void MidPointCircle(int r, int color);
void CirclePoints(int x,int y,int color);
void BresenhamCircle(int xc,int yc,int r,int color);
void plot_cicle_point(int xc,int yc,int x,int y,int color);
main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode," ");
cleardevice();
setbkcolor(2);
MidPointCircle(100,4);
getch();
cleardevice();
BresenhamCircle(100,100,50,5);
getch();
closegraph();
}
void MidPointCircle(int r,int color)
{
int x,y;
float d;
x=0;y=r;
d=1.25-r;
CirclePoints(x,y,color);
while(x<=y)
{
if(d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
CirclePoints(x,y,color);
}
}
void CirclePoints(int x,int y,int color)
{
putpixel(x,y,color);
putpixel(y,x,color);
putpixel(-x,y,color);
putpixel(y,-x,color);
putpixel(x,-y,color);
putpixel(-y,x,color);
putpixel(-x,-y,color);
putpixel(-y,-x,color);
}
void plot_circle_point(int xc,int yc,int x,int y,int color)
{
putpixel(xc+x,yc+y,color);
putpixel(xc-x,yc+y,color);
putpixel(xc+x,yc-y,color);
putpixel(xc-x,yc-y,color);
putpixel(xc+y,yc+x,color);
putpixel(xc-y,yc+x,color);
putpixel(xc+y,yc-x,color);
putpixel(xc-y,yc-x,color);
}
void BresenhamCircle(int xc,int yc,int r,int color)
{
int x,y,d;
x=0;y=r;
d=3-2*r;
while(x
{
plot_circle_point(xc,yc,x,y,color);
if(d<0)
d=d+4*x+6;
else
{
d=d+4*(x-y)+10;
y--;
}
x++;
}
if(x==y)
plot_circle_point(xc,yc,x,y,color);
}