Bresenham算法画圆及Open Gl实现

Bresenham算法画圆

Bresenham算法画直线
Bresenham算法画椭圆

  1. 输入圆的半径R。
  2. 计算初始值d=1-R、x=0、y=R。
  3. 绘制点(x,y)及其在八分圆中的另外七个对称点。
  4. 判断d的符号。若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。
  5. 当x ≤y时,重复步骤3和4。否则结束。

Open Gl实现

首先要在项目中配置Open Gl的环境


头文件
  #include 
  #include 
  #include 
  #include 
  #include
画圆
void DrawCircle() {
int r;
cin >> r;
int d = 1 - r;
int x = 0, y = r;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_POINTS);
while (x <= y)  {
    glVertex2i(x, y);
    glVertex2i(y, x);
    glVertex2i(-y, x);
    glVertex2i(-x, y);
    glVertex2i(-x, -y);
    glVertex2i(-y, -x);
    glVertex2i(y, -x);
    glVertex2i(x, -y);
    if (d <= 0)         
        d += 2 * x + 3;
    else { 
        d += 2 * (x - y) + 5;
        y--; 
    }
    x++;
}
glEnd();glFlush();
}
主函数
int main(int argc, char** argv) {
glutInit(&argc, argv);//glut初始化
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);// 显示模式:双缓冲、RGBA
glutInitWindowPosition(50, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Draw");
glClearColor(1.0, 1.0, 1.0, 1.0);// 缓存清空后的颜色值 
glMatrixMode(GL_PROJECTION);
glLoadIdentity();//恢复初始坐标系
gluOrtho2D(-200, 200.0, -200, 200.0);
int choice = 0;
cin >> choice;
if(choice==1)
    glutDisplayFunc(DrawLine);
if(choice==2)
    glutDisplayFunc(DrawCircle);
if(choice==3)
    glutDisplayFunc(DrawEllipse);
// 通知开始GLUT的内部循环
glutMainLoop();
return 0;
}

输入示例

输入示例

运行结果

Bresenham算法画圆及Open Gl实现_第1张图片
运行结果

你可能感兴趣的:(Bresenham算法画圆及Open Gl实现)