Saturday, January 16, 2010

midpoint circle algorithm




Download this file  : circle.c




program:
#include"graphics.h"
#include"stdio.h"
#include"conio.h"
#include"dos.h"
int step=0,r;
void main()
{
int i,j,x,y,p,a,midx,midy;
int gd=DETECT,gm,xcenter,ycenter;
printf("Enter the radius  :");
scanf("%d",&r);
initgraph(&gd,&gm,"");
midx=getmaxx()/2;
midy=getmaxy()/2;
line(midx,0,midx,2*midy);
line(0,midy,2*midx,midy);
outtextxy(midx-10,midy+10,"0");
outtextxy(midx-20,10,"-y");
outtextxy(midx-20,2*midy-10,"+y");
outtextxy(10,midy-10,"-x");
outtextxy(2*midx-20,midy-10,"+x");
xcenter=midx;
ycenter=midy;
x=0;
y=r;
p=1-r;
midpoint(xcenter,ycenter,x,y,p);
getch();
closegraph();
restorecrtmode();

}
midpoint(int xcenter,int ycenter,int x,int y,int p)
{
while(x < y)
{
plotcircle(xcenter,ycenter,x,y);
if(p<0)
p=p+2*x+1;
else
{
p=p+2*(x-y)+1;
y=y-1;
}
x=x+1;
}
if(x==y)
plotcircle(xcenter,ycenter,x,y);
return;
}
plotcircle(int xcenter,int ycenter,int x,int y)
{
delay(50);
step++;
if(step==r/2)
{
outtextxy(xcenter+x,ycenter+y,"(+x,-y)");
outtextxy(xcenter-x-50,ycenter+y,"(-x,-y)");
outtextxy(xcenter+x,ycenter-y,"(+x,+y)");
outtextxy(xcenter-x-50,ycenter-y,"(-x,+y)");
outtextxy(xcenter+y,ycenter+x,"(+y,-x)");
outtextxy(xcenter-y-50,ycenter+x,"(-y,-x)");
outtextxy(xcenter+y,ycenter-x,"(+y,+x)");
outtextxy(xcenter-y-50,ycenter-x,"(-y,+x)");
}
putpixel(xcenter+x,ycenter+y,10);
putpixel(xcenter-x,ycenter+y,10);
putpixel(xcenter+x,ycenter-y,10);
putpixel(xcenter-x,ycenter-y,10);
putpixel(xcenter+y,ycenter+x,10);
putpixel(xcenter-y,ycenter+x,10);
putpixel(xcenter+y,ycenter-x,10);
putpixel(xcenter-y,ycenter-x,10);
putpixel(xcenter+x,ycenter-x,10);
return;
}




Download this file  : circle.c



output:


Enter the radius : 150









Download this file  : circle.c