Moving Wheel using Mid-Point Circle algorithm and DDA Line algorithm


Levels of difficulty: / perform operation:

C Program

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
int l = 1;
void ddaline(int x1, int y1, int x2, int y2) {
	int s, dx, dy, m;
	float xi, yi, x, y;
	dx = x2 - x1;
	dy = y2 - y1;
	if (abs(dx) > abs(dy))
		s = abs(dx); else
		s = abs(dy);
	xi = dx / (float) s;
	yi = dy / (float) s;
	x = x1;
	y = y1;
	putpixel(x1 + 0.5, y1 + 0.5, 15);
	for (m = 0; m < s; m++) {
		x += xi;
		y += yi;
		putpixel(x + 0.5, y + 0.5, 15);
	}
}
void plotpoints1(int x, int y, int cx, int cy) {
	putpixel(cx + x, cy + y, 15);
	putpixel(cx - x, cy - y, 15);
	putpixel(cx - y, cy + x, 15);
	putpixel(cx + y, cy - x, 15);
	if (l % 20 == 0) {
		ddaline(cx - x, cy - y, cx + x, cy + y);
		ddaline(cx - y, cy + x, cx + y, cy - x);
	}
	l++;
}
void plotpoints2(int x, int y, int cx, int cy) {
	putpixel(cx - x, cy + y, 15);
	putpixel(cx + x, cy - y, 15);
	putpixel(cx + y, cy + x, 15);
	putpixel(cx - y, cy - x, 15);
	if (l % 20 == 0) {
		ddaline(cx + x, cy - y, cx - x, cy + y);
		ddaline(cx - y, cy - x, cx + y, cy + x);
	}
	l++;
}
void mcircle(int cx, int cy, int r) {
	int x = 0, y, p;
	y = r;
	p = 1 - r;
	while (x < y) {
		plotpoints1(x, y, cx, cy);
		x++;
		if (p < 0)
			    p += 2 * x + 1; else {
			y--;
			p += 2 * (x - y) + 1;
		}
	}
	x = y + 1;
	while (abs(x) > 0) {
		plotpoints2(x, y, cx, cy);
		x--;
		if (p >= 0)
			    p = p - 2 * x - 1; else {
			y++;
			p = p - 2 * (x - y) - 1;
		}
	}
}
void main() {
	int gd = DETECT, gm = DETECT;
	int i = 0;
	initgraph(&gd, &gm, "");
	while (!kbhit()) {
		if (i > 640)
			    i = -200;
		cleardevice();
		mcircle(100 + (i++), 200, 100);
		delay(90);
		i++;
	}
	getch();
}