用OpenGL实现 Breseham画圆算法
2013-11-01 20:24
197 查看
#include <GL/glut.h> #include <math.h> #include <iostream> using namespace std; int xs = 0; int ys = 0; int r = 0; void BresenhamCircle(int x0, int y0, int r) { int x = 0; int y = r; int d = 2 * (1 -r); int d1 = 0; int d2 = 0; int direction; while (y >= 0) { glVertex2i(x0+x, y0+y); glVertex2i(x0+x, y0-y); glVertex2i(x0-x, y0-y); glVertex2i(x0-x, y0+y); if (d < 0) { d1 = 2 *(d + y) - 1; if (d1 < 0) { direction = 1; } else { direction = 2; } } else if (d > 0) { d2 = 2 * (d - x) -1; if (d < 0) { direction = 2; } else { direction = 3; } } else direction = 2; switch (direction) { case 1: x++; d += 2 * x + 1; break; case 2: x++; y--; d += 2 * (x - y + 1); break; case 3: y--; d += (-2 * y + 1); break; } } } void CircleSegment() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0, 0.0, 0.0); glBegin(GL_POINTS); BresenhamCircle(xs, ys, r); glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); cout << "输入圆心坐标和半径(范围为 0 - 500, 0-500):"; cin >> xs >> ys >> r; glutInitWindowPosition(50, 100); glutInitWindowSize(500, 500); glutCreateWindow("Breseham画圆算法"); glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 500, 0.0, 500.0); glutDisplayFunc(CircleSegment); glutMainLoop(); return 0; }
相关文章推荐
- 关于指针的一些事情
- 动易2006序列号破解算法公布
- 解决Vista系统OpenGL驱动问题的方法整理
- C#数据结构与算法揭秘二
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C++中引用(&)的用法与应用实例分析
- 浅析STL中的常用算法
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析