Bresenham 画圆算法适合于生成整圆,它使用8路对称法,只计算出90°~45°内的点,移动方向为+x,-y。

递推公式:

完整代码:
加上Sleep函数,减慢画圆速度,以便观察画圆过程。

#include<GL/glut.h>
#include<windows.h>
void setPixel(int x, int y)
{glColor3f(0.0, 0.0, 1.0);    glPointSize(2.0f);glBegin(GL_POINTS);glVertex2f(x, y);glEnd();glFlush();
}
void CirclePoint(int x0, int y0,int x,int y){setPixel(x0 + x, y0 + y);setPixel(x0 + y, y0 + x);setPixel(x0 + x, y0 - y);setPixel(x0 - x, y0 + y);setPixel(x0 + y, y0 - x);setPixel(x0 - x, y0 - y);setPixel(x0 - y, y0 - x);setPixel(x0 - y, y0 + x);
}
void bresenhamcircle(int x0, int y0,int r)
{int x, y;y = r;x = 0;int d = 3 - 2 * r;while (x <y) {Sleep(100);CirclePoint(x0, y0,x,y);if (d<0) d += 4*x+6;else {d+= 4*(x-y)+10;y--;}x++;}
}
//神秘代码---->控制了放大后的圆形不变形
void ChangeSize(GLsizei w, GLsizei h)
{if (h == 0)     h = 1;// 设置视区尺寸 glViewport(0, 0, w, h);// 重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();// 建立修剪空间的范围if (w <= h)glOrtho(0.0f, 250.0f, 0.0f, 250.0f*h / w, 1.0, -1.0);elseglOrtho(0.0f, 250.0f*w / h, 0.0f, 250.0f, 1.0, -1.0);
}
void display(void) {glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0, 0.0f, 1.0f);glBegin(GL_POINTS);bresenhamcircle(100,100, 30);glEnd();glFlush();
}
int main(int argc, char *argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("Bresenham算法画圆");glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-100.0, 300.0, -100.0, 300.0);glutDisplayFunc(display);glutReshapeFunc(ChangeSize);glutMainLoop();return 0;
}

运行结果:

如果对上面代码不清楚的,建议看一下Bresenham直线算法注释:
Bresenham直线算法

https://blog.csdn.net/qq_40573632/article/details/102306526

Bresenham画圆算法相关推荐

  1. Bresenham 画圆算法原理

    文章目录 前言 Bresenham 画圆算法原理 两个近似 构造判别式 圆与网格点的关系 关系由来 关系含义 pip_ipi​ 递推 画圆 程序伪码 圆与网格点的关系图示 前言 首先简要介绍一下生成圆 ...

  2. 【计算机图形学】小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解

    小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解 引言 如何画圆 基本思想 中点画圆法 中点画圆基本思路 中点画圆改进 Bresenham画圆算法 Bre ...

  3. 中点Bresenham画圆算法|MFC|计算机图形学

    中点Bresenham画圆算法|MFC|计算机图形学 Bresenham中点画圆算法 计算机图形学-基本图元的生成-圆 基于学习直线的生成算法后,又展开了圆.椭圆的讲解: 此次试验是简单的MFC应用, ...

  4. 计算机图形学实习教程之基本图形的生成(直线DDA算法,直线中点算法,Bresenham画圆算法),利用C#实现,附源码

    环境:Win10+Visual Studio 2022 Community 在本次实验中需要用到上一篇文章实验内容的代码及环境,详情请见:传送门 目录 一.实验目的 二.实验过程 1.生成直线的DDA ...

  5. bresenham算法画圆c语言,bresenham画圆算法

    中点画圆算法在一个方向上取单位间隔,在另一个方向的取值由两种可能取值的中点离圆的远近而定.实际处理中,用决策变量的符号来确定象素点的选择,因此算法效率较高. 设要显示圆的圆心在原点(0,0),半径为R ...

  6. C语言——中点画圆算法和Bresenham画圆算法(easyx图形库)

    一.中点画圆法 首先是中点画圆法,考虑圆心在原点,半径为R的圆在第一象限内的八分之一圆弧,从点(0, R)到点(R/ , R/ )顺时针方向确定这段圆弧.假定某点Pi(xi, yi)已经是该圆弧上最接 ...

  7. 【计算机图形学】中点画圆算法和Bresenham画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

  8. java用中点画圆法_Bresenham画圆算法 与中点画圆法

    Bresenham画圆算法 不失一般性,假设圆的圆心位于坐标原点(如果圆心不在原点,可以通过坐标平移使其与原点重合),半径为R.以原点为圆心的圆C有四条对称轴:x = 0, y = 0, x = y和 ...

  9. python3画圆、直线_Bresenham直线算法与画圆算法

    在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我 ...

最新文章

  1. android自动创建桌面,Android应用启动后自动创建桌面快捷方式的实现方法
  2. iOS面试题 第一天
  3. 全局的过滤器, 进行时间的格式化——所谓的全局过滤器,就是所有的VM实例都共享的 || 如何自定义一个私有的过滤器(局部)
  4. 净水器选购指南,如何挑选家用净水器
  5. 跟我一起写 Makefile(五)
  6. java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000
  7. 利用奇异值分解(SVD)简化数据
  8. boost::outcome模块constexpr相关的测试程序
  9. python中分支结构包括哪些_python中的分支结构
  10. newifi3高恪魔改最新_12.22达达最新球球id账号呆瓜表
  11. Oracle数据库分页总结
  12. ubuntu 13.10 64位安装及配置 google拼音输入法及Adobe flash player、mp3 插件安装、中文GBK编码等 -转
  13. audio 小程序 放大_小程序之争:支付宝、百度“放大招”,春节欲打突围战
  14. 利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行
  15. java中类成员,java中类成员的限定词
  16. 2019,我的影像记录
  17. 电工基础知识-配电室安全须知
  18. 淘宝模块中宝贝跳转链接
  19. ip a命令显示的UP与LOWER_UP的区别
  20. 计算机网络相关论文目录怎么弄,如何给你的标书、论文编页码和目录-论文页码设置...

热门文章

  1. Apple苹果开发者Certificates, Identifiers Profiles创建
  2. Cocos2d-x 3D渲染技术 (一)
  3. 数据分析的别称也叫定性数据分析
  4. 递归——迭代是人,递归是神
  5. average函数用法c语言,Average函数
  6. C语言在字符串中查找字符串
  7. C语言的字符串查找函数
  8. Java工程师可以从事哪些工作?
  9. Anaconda3+PyQt5+Eric6+PyCharm 安装配置教程(Win10)
  10. QBC常用限定方法说明