// bb.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <gl/glut.h>
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0); //设置背景颜色为黑色
glMatrixMode(GL_PROJECTION); //对投影相关进行操作
gluOrtho2D(0.0, 30.0, 0.0, 30.0);
}
void putpixel(int x, int y)
{
glColor3f(1.0, 0.0, 0.0);
glPointSize(2.0f);
glBegin(GL_POINTS);
glVertex2f(15+x, 15+y);
glEnd();
glFlush();
}
void MidBresenhamEllipse(int a,int b)
{
int x,y;
float d1,d2;
x=0;
y=b;
d1=b*b+a*a*(-b+0.25);
putpixel(x,y);
putpixel(-x,-y);
putpixel(-x,y);
putpixel(x,-y);
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<=0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=b*b*(2*x+3)+a*a*(-2*y+2);
x++;
y--;
}
putpixel(x,y);
putpixel(-x,-y);
putpixel(-x,y);
putpixel(x,-y);
}/*while上半部分*/
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while(y>0)
{
if(d2<=0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
x++;
y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
putpixel(x,y);
putpixel(-x,-y);
putpixel(-x,y);
putpixel(x,-y);
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
MidBresenhamEllipse(6,5); //长半轴a=6, 短半轴b=5
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(0,0);
glutCreateWindow("中点Bresenham画椭圆");
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}
运行结果: