当前位置:   article > 正文

计算机图形学02:中点BH算法绘制直线_图形学直线绘制

图形学直线绘制

在这里插入图片描述

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

在这里插入图片描述

专栏推荐

专栏系列文章

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


一、算法原理

0 = < k < = 1 0=<k<=1 0=<k<=1时:

在这里插入图片描述

直线在M点上方为正,在点M下方为负。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


二、缺点

中点BH算法存在许多浮点数,而浮点数的运算不利于硬件的性能提升以及优化!最终影响程序的性能。

因此,改进的中点BH算法应运而生,它的主要方法为:通过缩放模型参数,将算法中的浮点数转化为整数,进而实现运算的加速。


三、化整改进

在这里插入图片描述
另一种改进的方法如下:改进的中点BH算法


四、OpenGL代码实现

// 中点Bresenham算法绘制直线段(0≤k≤1)
void  MidBhline(int  x0, int  y0, int  x1, int  y1) {
	int  dx, dy, d, UpIncre, DownIncre, x, y;
	if (x0 > x1) { // x0为起始点,x1为终止点
		x = x1; x1 = x0; x0 = x; y = y1; y1 = y0; y0 = y;
	}
	x = x0; y = y0; dx = x1 - x0; dy = y1 - y0; d = dx - 2 * dy;
	UpIncre = 2 * dx - 2 * dy;	// 2dx*(1 + k)
	DownIncre = -2 * dy;		// 2dx(-k)
	glBegin(GL_POINTS);		// 开始绘制点
	while (x <= x1) {
		glVertex2i(x, y);		// 画点
		x++;					// 更新x
		if (d < 0) {			// 根据d的符号更新d和y
			y++;
			d += UpIncre;
		}
		else
			d += DownIncre;
	}
	glEnd();					// 结束绘制点
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

五、效果

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

在这里插入图片描述

the end……

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/532346
推荐阅读
相关标签