开发环境:

VC++6.0,OpenGL

实验内容:

使用中点Bresenham算法画圆。

实验结果:

代码:

 #include <gl/glut.h>

 #define WIDTH  500
#define HEIGHT 500
#define OFFSET 15
#define R 8 void Init() //其它初始化
{
glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明
glColor3f(1.0f,0.0f,0.0f); //设置画笔颜色 glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 30.0, 0.0, 30.0);
glMatrixMode(GL_MODELVIEW); //glMatrixMode(GL_PROJECTION); //设置投影
//gluOrtho2D(0.0,WIDTH,0.0,HEIGHT); //设置
} void CirclePoint(int x,int y)
{
glPointSize(); //设置点的粗细
glBegin(GL_POINTS); glVertex2i(OFFSET+x,OFFSET+y);
glVertex2i(OFFSET+y,OFFSET+x);
glVertex2i(OFFSET-y,OFFSET+x);
glVertex2i(OFFSET-x,OFFSET+y);
glVertex2i(OFFSET-x,OFFSET-y);
glVertex2i(OFFSET-y,OFFSET-x);
glVertex2i(OFFSET+y,OFFSET-x);
glVertex2i(OFFSET+x,OFFSET-y); glEnd();
} void MidBresenhamCircle(int r)
{
int x,y,d;
x=,y=r,d=-r;
while(x<=y){
CirclePoint(x,y); //画圆
if(d<)
d+=*x+;
else{
d+=*(x-y)+;
y--;
}
x++;
}
} void Display()
{
glClear(GL_COLOR_BUFFER_BIT); //清空颜色堆栈 MidBresenhamCircle(R); //画一个半径为150的圆(半径为8的太小了。。) glFlush(); //清空缓冲区指令
} int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化显示模式
glutInitWindowSize(WIDTH,HEIGHT); //初始化窗口大小
glutInitWindowPosition(,); //初始化窗口出现位置
glutCreateWindow("中点Bresenham画圆"); //初始化窗口标题 glutDisplayFunc(Display); //注册显示函数
Init(); //其它初始化
glutMainLoop(); //进入程序循环 return ;
}

Freecode : www.cnblogs.com/yym2013

《图形学》实验六:中点Bresenham算法画圆的更多相关文章

  1. 《图形学》实验七:中点Bresenham算法画椭圆

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 50 ...

  2. 《图形学》实验四:中点Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...

  3. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

  4. 基于Bresenham算法画圆

    bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...

  5. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

  6. 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆

    为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置). 圆心位于原点的圆有四条对称轴x=0,y= ...

  7. 利用canvas实现的中点Bresenham算法

    Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...

  8. [DEBUG]椭圆的中点Bresenham算法边缘绘制出现错误

    在使用椭圆的中点Bresenham算法绘制椭圆时, 当椭圆足够大时, 椭圆的边缘会出现下面这种情况. 出错原因: 将a, b声明为了int类型, 导致中点判别式中发生溢出 关注后面的a*b*a*b当a ...

  9. Bresenham算法画填充圆及SDL代码实现

    画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...

随机推荐

  1. 如何在Mac OS X上安装 Ruby运行环境

    对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境.此安装方法同样适用于产品环境! 系统需求 首先确定操 ...

  2. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  3. Java创建对象的几种方法

    有时候,也可能碰到这样面试题,如: Java创建对象有哪几种方法? 除了new之外,java创建对象还有哪几种方式? 本文结合例子,给出几种Java创建对象的方法,Here we go~~~~ 使用n ...

  4. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  5. 10月28日上午 PHP数据访问

    1.建一个连接(连接PHP和MYSQL) $db = new MySQLi("localhost","root","666","t ...

  6. GDB调试D语言

    GDB7.2后开始支持对D语言的调试 GUI前端 http://beej.us/guide/bggdb/#compiling GDB教程 http://blog.csdn.net/haoel/arti ...

  7. 安全测试及B/S C/S安全性比较

    一.用户认证安全的测试要考虑问题: 1.        明确区分系统中不同用户权限 2.        系统中会不会出现用户冲突 3.        系统会不会因用户的权限的改变造成混乱 4.     ...

  8. [UML]UML系列——类图class的关联关系(聚合、组合)

    关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...

  9. print、sp_helptext的限制与扩展

    在SQL中,使用动态SQL是很常见的.有些复杂的计算,或是存储过程,代码很长,中间可能有多次执行SQL语句.而调试拼串的SQL语句却是件痛苦的事,很难看出来运行的语句是什么.所以我会经常使用print ...

  10. 0、Web基本概念

    一.Web的概念: 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思. 二.Web的分类:Internet上供外界访问的Web资源分为静态Web资源和动态Web资源两种. 1.静态Web资源:W ...