Blog Archives

MID-POINT and BRESENHAM Circle Drawing Algorithm

// CIRCLE ALGORITHM

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

void midc(float r,float xc,float yc);
void bresc(float r,float xc,float yc);

int main()
{
	float xc,yc,x,y,p,r,m,n;
	int c;
	int gdriver = DETECT, gmode;
	initgraph(&gdriver, &gmode,"C:\\tc\\bgi");
	printf("\nEnter the radius of the circle\n");
	scanf("%f",&r);
	printf("\nEnter the centre of the circle\n");
	scanf("%f%f",&xc,&yc);

first:
	printf("\nOPTIONS \n1.MIDPOINT CIRCLE ALGORITHM \n2.BRESENHAM CIRCLE ALGORITHM \n3.EXIT");
	printf("\n Enter your choice:");
	scanf("%d",&c);
	switch(c)
	{
	case 1:
		midc(r,xc,yc);
		goto first;
	case 2:
		bresc(r,xc,yc);
		goto first;
	case 3:
		exit(0);
	}
	getch();
	return 0;
}
void midc(float r,float xc,float yc)
{
	float p,x,y,m,n;
	x=0;
	y=r;
	putpixel(xc+x,yc+y,2);
	putpixel(xc-x,yc+y,2);
	putpixel(xc+x,yc-y,2);
	putpixel(xc-x,yc-y,2);
	putpixel(xc+y,yc+x,2);
	putpixel(xc-y,yc+x,2);
	putpixel(xc+y,yc-x,2);
	putpixel(xc-y,yc-x,2);
	p=(5/4)-r;
	while(x<y)
	{
		if(p<0)
		{
			x=x+1;
			p=p+(2*x)+1;
		}
		else
		{
			x=x+1;
			y=y-1;
			m=(2*x)+2;
			n=(2*y)+2;
			p=p+m+1-n;
		}
		putpixel(xc+x,yc+y,2);
		putpixel(xc-x,yc+y,2);
		putpixel(xc+x,yc-y,2);
		putpixel(xc-x,yc-y,2);
		putpixel(xc+y,yc+x,2);
		putpixel(xc-y,yc+x,2);
		putpixel(xc+y,yc-x,2);
		putpixel(xc-y,yc-x,2);
	}
	getch();
}


void bresc(float r,float xc,float yc)
{
	float p,x,y;

	x=0;
	y=r;
	putpixel(xc+x,yc+y,2);
	putpixel(xc-x,yc+y,2);
	putpixel(xc+x,yc-y,2);
	putpixel(xc-x,yc-y,2);
	putpixel(xc+y,yc+x,2);
	putpixel(xc-y,yc+x,2);
	putpixel(xc+y,yc-x,2);
	putpixel(xc-y,yc-x,2);
	p=3-(2*r);
	while(x<y)
	{
		if(p<0)
		{
			x=x+1;
			p=p+(4*x)+6;
		}
		else
		{
			x=x+1;
			y=y-1;
			p=p+(4*x)-(4*y)+10;
		}
		putpixel(xc+x,yc+y,2);
		putpixel(xc-x,yc+y,2);
		putpixel(xc+x,yc-y,2);
		putpixel(xc-x,yc-y,2);
		putpixel(xc+y,yc+x,2);
		putpixel(xc-y,yc+x,2);
		putpixel(xc+y,yc-x,2);
		putpixel(xc-y,yc-x,2);
	}
	getch();
}