# Midpoint Circle Algorithm Using C Programming

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>

#define PI 3.14

float startangle,endangle;
int x,y;

int Can_draw( float theta )
{
if( theta >= startangle && theta<= endangle )
return 1;
return 0;
}

void Circlepoints(int x,int y,int xc,int yc)
{
float theta;
theta = atan( (float)y/x );
theta = theta * (180/M_PI);

if( Can_draw(theta))
putpixel(xc+x,yc-y,WHITE);
if( Can_draw(360-theta))
putpixel(xc+x,yc+y,WHITE);

if( Can_draw(90-theta))
putpixel(xc+y,yc-x,WHITE);
if( Can_draw(270+theta))
putpixel(xc+y,yc+x,WHITE);

if( Can_draw(180-theta))
putpixel(xc-x,yc-y,WHITE);
if( Can_draw(180+theta))
putpixel(xc-x,yc+y,WHITE);

if( Can_draw(90+theta))
putpixel(xc-y,yc-x,WHITE);
if( Can_draw(270-theta))
putpixel(xc-y,yc+x,WHITE);
}

{
float d = (5/4.0) - rad;

while(y>x)
{
if(d<0)
d += 2*x+3;
else
d+=(2*x)-(2*y)+5,y--;
x++;
Circlepoints(x,y,xc,yc);
delay(90);
}
}
void main()
{
int gd=DETECT,gm;
float xstart,ystart,xend,yend;
initgraph(&gd,&gm,"..\\bgi");
do
{
clrscr();
cleardevice();
printf("\n 1.Draw a Circle\n 2.Draw a Sector\n 3.Draw an Arc\n 4.Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("\n Enter the center:");
scanf("%d %d",&xc,&yc);
cleardevice();
startangle=0,endangle=360;
getch();
break;

case 2: printf("\n Enter the center:");
scanf("%d %d",&xc,&yc);
printf("\n Enter the startangle:");
scanf("%f",&startangle);
printf("\n Enter the endangle:");
scanf("%f",&endangle);
cleardevice();
if(startangle>endangle)
{
temp=startangle;
startangle=endangle;
endangle=temp;
}
line(xc,yc,xstart,ystart);
line(xc,yc,xend,yend);
getch();
break;

case 3: printf("\n Enter the center:");
scanf("%d %d",&xc,&yc);
printf("\n Enter the startangle:");
scanf("%f",&startangle);
printf("\n Enter the endangle:");
scanf("%f",&endangle);
cleardevice();
if(startangle>endangle)
{
temp=startangle;
startangle=endangle;
endangle=temp;
}