计算机图形学03:改进的中点BH算法

在这里插入图片描述

作者:非妃是公主
专栏:《计算机图形学》
博客地址:https://blog.csdn.net/myf_666
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩
在这里插入图片描述

文章目录

  • 专栏推荐
  • 专栏系列文章
  • 一、改进缘由
  • 二、算法原理
  • 三、OpenGL代码实现
  • 四、实现效果图
  • the end……

专栏推荐

专栏名称 专栏地址
软件工程 专栏——软件工程
计算机图形学 专栏——计算机图形学
操作系统 专栏——操作系统
软件测试 专栏——软件测试
机器学习 专栏——机器学习
数据库 专栏——数据库
算法 专栏——算法

专栏系列文章

文章名称 文章地址
直线生成算法(DDA算法) 计算机图形学01——DDA算法
中点BH算法绘制直线 计算机图形学02——中点BH算法
改进的中点BH算法 计算机图形学03——改进的中点BH算法
中点Bresenham画椭圆 计算机图形学04——中点BH绘制椭圆
中点BH算法绘制任意斜率直线 计算机图形学05——中点BH算法绘制任意斜率的直线
中点Bresenham画圆 计算机图形学06——中点BH算法画圆
有效边表法的多边形扫描转换 计算机图形学07——有效边表法绘制填充多边形
中点BH算法绘制抛物线 100 x = y 2 100x = y^2 100x=y2 计算机图形学08——中点BH绘制抛物线
二维观察之点的裁剪 计算机图形学09——二维观察之点裁剪
二维观察之线的裁剪 计算机图形学10——二维观察之线裁剪
二维观察之多边形的裁剪 计算机图形学11——二维观察之多边形裁剪
二维图形的几何变换 计算机图形学12——二维图形几何变换
三维图形的几何变换 计算机图形学13——三维图形几何变换
三维图形的投影变换 计算机图形学14——三维图形投影变换

计算机图形学(英语:computer graphics,缩写为CG)是研究计算机在硬件和软件的帮助下创建计算机图形的科学学科,是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。虽然这个词通常被认为是指三维图形,事实上同时包括了二维图形以及影像处理。


一、改进缘由

为什么需要改进中点BH算法呢?因为上一篇(计算机图形学02:中点BH算法绘制直线)已经提到,中点BH算法会带来浮点数的问题,而浮点数对于硬件的运算不仅实现复杂,而且运行起来效率低下。因此,我们需要对其进行改进,也就诞生了改进的中点BH算法


二、算法原理

d的含义发生了改变,不再是中点了

计算机图形学03:改进的中点BH算法_第1张图片

计算机图形学03:改进的中点BH算法_第2张图片

计算机图形学03:改进的中点BH算法_第3张图片

计算机图形学03:改进的中点BH算法_第4张图片

改进点1将右半部分的0.5去掉了

计算机图形学03:改进的中点BH算法_第5张图片

这样通过改进的BH算法,去掉了小数,这是一种改进方法。上一篇中也存在着去整改进,为什么有两种改进方法呢?(上一篇文章地址:计算机图形学02:中点BH算法绘制直线)

我并不清楚,也没有进一步检索,知道的小伙伴可以把答案放在评论区!我会补上。

但我猜测,最初的BH算法应该是没有进行化整的,后面在实际硬件运算中发现了问题,因而出现了2种改进方法,一种是上文提到的(叫做中点BH算法的化整改进),另一种就是本文提到的,叫做改进的中点BH算法= =。(不过这只是一种猜测……)


三、OpenGL代码实现

// 改进的Bresenham算法绘制直线段(0≤k≤1)
void  Bhline(int  x0, int  y0, int  x1, int  y1) {
	int  x, y, dx, dy, e;
	if (x0 > x1) {				// x0为起始点,x1为终止点
		x = x1; x1 = x0; x0 = x; y = y1; y1 = y0; y0 = y;
	}
	dx = x1 - x0;  dy = y1 - y0;  x = x0;  y = y0;
	e = -dx;
	glBegin(GL_POINTS);
	while (x <= x1) {
		glVertex2i(x, y);
		x++;
		e = e + 2 * dy;			// e = e + 2dx * k
		if (e > 0) {
			y++;
			e = e - 2 * dx;		// e = e - 1
		}
	}
	glEnd();
}

四、实现效果图

运行代码后,调用函数,效果如下:

在这里插入图片描述


the end……

改进的中点BH算法到这里就要结束啦~~到此既是缘分,欢迎您的点赞评论收藏关注我,不迷路,我们下期再见!!

我是Cherries,一位计算机科班在校大学生,写博客用来记录自己平时的所思所想!
内容繁杂,又才疏学浅,难免存在错误,欢迎各位大佬的批评指正!
我们相互交流,共同进步!

:本文由非妃是公主发布于https://blog.csdn.net/myf_666,转载请务必标明原文链接:https://blog.csdn.net/myf_666/article/details/128164331

你可能感兴趣的:(计算机图形学,算法,OpenGL,图形渲染,c++)