Bresenham Midpoint circle algorithm

김채윤_17·2021년 6월 7일

알고리즘 공부

목록 보기
2/2
#include <stdio.h>
#include <stdlib.h>
#include <gl/glut.h>

int x0, y0, r;
void setPixel(int x, int y) {
	glBegin(GL_POINTS);
	glVertex2i(x + x0, y + y0);
	glEnd();
}

void init(void) {
	glColor3f(0.0f, 0.0f, 0.0f);
	glPointSize(4.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0, 500.0, 0.0, 500.0);
}

void midPointCircle() {
	int x = 0;
	int y = r;
	int p = 1 - r;
	setPixel(x, y);

	while (y > x)
	{
		if (p < 0)
		{
			x++;
			p += 2 * x + 1;
		}
		else
		{
			y--;
			x++;
			p += 2 * (x - y) + 1;
		}
		setPixel(x, y);
		setPixel(x, -y);
		setPixel(-x, y);
		setPixel(-x, -y);
		setPixel(y, x);
		setPixel(-y, x);
		setPixel(y, -x);
		setPixel(-y, -x);
	}
}

void myDisplay(void) {
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0, 0.0, 1.0);
	glPointSize(5.0);
	midPointCircle();
	glFlush();
}

int main(int argc, char** argv) {
	printf("중심 좌표(x,y)와 반지름을 입력하세요 : ");
	scanf_s("%d %d %d", &x0, &y0, &r);
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(500, 500);
	glutInitWindowPosition(0, 0);
	glutCreateWindow("Midpoint Circle");
	glutDisplayFunc(myDisplay);
	init();
	glutMainLoop();
}









profile
안녕하세요

0개의 댓글