Draw a Ellipse : Mid-Point Algorithm


Levels of difficulty: / perform operation:

C Program

#include<graphics.h>
#include<conio.h>
#include<stdio.h>
void plotpoints(int cx, int cy, int x, int y) {
	putpixel(cx + x, cy + y, 4);
	putpixel(cx - x, cy + y, 4);
	putpixel(cx + x, cy - y, 4);
	putpixel(cx - x, cy - y, 4);
}
void main() {
	int cx, cy, rx, ry;
	printf("Enter the center ");
	scanf("%d%d", &cx, &cy);
	printf("x radius : ");
	scanf("%d", &rx);
	printf("y radius : ");
	scanf("%d", &ry);
	long rx2 = (long) rx * rx;
	long ry2 = (long) ry * ry;
	long trx2 = 2 * rx2;
	long try2 = 2 * ry2;
	long p, x = 0, y = ry;
	long px = 0;
	long py = trx2 * y;
	p = (long) ((ry2 - (rx2 * ry) + (0.25 * rx2)) + 0.5);
	int gd = DETECT, gm = DETECT;
	initgraph(&gd, &gm, "");
	cleardevice();
	putpixel(cx, cy, 15);
	while (px < py) {
		plotpoints(cx, cy, x, y);
		x++;
		px += try2;
		if (p < 0)
			    p += ry2 + px; else {
			y--;
			py -= trx2;
			p += ry2 + px - py;
		}
	}
	py = trx2 * y;
	px = try2 * x;
	p = (long) ((ry2 * (x + 0.5) * (x + 0.5) + rx2 * (y - 1) * (y - 1) - rx2 * ry2) + 0.5);
	while (y >= 0) {
		plotpoints(cx, cy, x, y);
		y--;
		py -= trx2;
		if (p > 0)
			    p += rx2 - py; else {
			x++;
			px += try2;
			p += rx2 - py + px;
		}
	}
	getch();
}