《图形学》实验六:中点Bresenham算法画圆

开发环境:

VC++6.0,OpenGL

实验内容:

使用中点Bresenham算法画圆。

实验结果:

代码:

 1 #include <gl/glut.h>
 2 
 3 #define WIDTH  500
 4 #define HEIGHT 500
 5 #define OFFSET 15
 6 #define R 8
 7 
 8 void Init()    //其它初始化
 9 {
10     glClearColor(1.0f,1.0f,1.0f,1.0f);    //设置背景颜色,完全不透明
11     glColor3f(1.0f,0.0f,0.0f);        //设置画笔颜色
12 
13     glMatrixMode(GL_PROJECTION);
14     glLoadIdentity();
15     gluOrtho2D(0.0, 30.0, 0.0, 30.0);
16     glMatrixMode(GL_MODELVIEW);
17 
18     //glMatrixMode(GL_PROJECTION);    //设置投影
19     //gluOrtho2D(0.0,WIDTH,0.0,HEIGHT);    //设置
20 }
21 
22 void CirclePoint(int x,int y)
23 {
24     glPointSize(5);    //设置点的粗细
25     glBegin(GL_POINTS);
26 
27     glVertex2i(OFFSET+x,OFFSET+y);
28     glVertex2i(OFFSET+y,OFFSET+x);
29     glVertex2i(OFFSET-y,OFFSET+x);
30     glVertex2i(OFFSET-x,OFFSET+y);
31     glVertex2i(OFFSET-x,OFFSET-y);
32     glVertex2i(OFFSET-y,OFFSET-x);
33     glVertex2i(OFFSET+y,OFFSET-x);
34     glVertex2i(OFFSET+x,OFFSET-y);
35 
36     glEnd();
37 }
38 
39 void MidBresenhamCircle(int r)
40 {
41     int x,y,d;
42     x=0,y=r,d=1-r;
43     while(x<=y){
44         CirclePoint(x,y);    //画圆
45         if(d<0)
46             d+=2*x+3;
47         else{
48             d+=2*(x-y)+5;
49             y--;
50         }
51         x++;
52     }
53 }
54 
55 void Display()
56 {
57     glClear(GL_COLOR_BUFFER_BIT);    //清空颜色堆栈
58 
59     MidBresenhamCircle(R);    //画一个半径为150的圆(半径为8的太小了。。)
60 
61     glFlush();    //清空缓冲区指令
62 }
63 
64 int main(int argc,char** argv)
65 {
66     glutInit(&argc,argv);
67     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);    //初始化显示模式
68     glutInitWindowSize(WIDTH,HEIGHT);    //初始化窗口大小
69     glutInitWindowPosition(200,100);    //初始化窗口出现位置
70     glutCreateWindow("中点Bresenham画圆");    //初始化窗口标题
71 
72     glutDisplayFunc(Display);    //注册显示函数
73     Init();        //其它初始化
74     glutMainLoop();    //进入程序循环
75 
76     return 0;
77 }


Freecode : www.cnblogs.com/yym2013

原文地址:https://www.cnblogs.com/yym2013/p/4619285.html