美文网首页
Bresenham算法画圆及Open Gl实现

Bresenham算法画圆及Open Gl实现

作者: jocelynzhang97 | 来源:发表于2018-05-21 11:16 被阅读0次

    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 <cmath>
      #include <GL/glew.h>
      #include <GL/glut.h>
      #include <GL\freeglut.h>
      #include<Windows.h>
    
    画圆
    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实现

          本文链接:https://www.haomeiwen.com/subject/scrfjftx.html