- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三种光栅直线算法的比较
[摘要] 本文以DDA算法,中点直线算法和Bresenham直线算法为模型,主要从时空的角度讨论三种算法的优缺点。并以C语言为工具编制了相应的程序以实现该算法。
[关键词] 光栅化DDA算法中点直线算法Bresenham直线算法
引言
显示器的屏幕由可以发光的像素点组成,从放大的几何位置看,所有这些像素点构成一个矩形的阵列,利用计算机控制各像素点按我们指定的要求发光, 就构成了我们需要的图形。现实中我们要讨论的图形却常常是用几何参数来描述的,哪些像素点是正好在图形上或最靠近图形,通过这些像素点描绘出相应的几何体的图形。在点阵图形系统使用中,每建立或修改一幅图形,一般要用数百次甚至数千次直线等其他基本运算。因此这些算法不仅必须要建立视觉效果比较好的图形,还必须要执行得尽可能地快。
1 算法比较的三个指标
评价一个转换算法的优劣可以通过如下三个方面来进行:
(1) 所显示图形的精度,转换出的点阵图形毕竟只是对原始图形的近似, 有一定的误差, 这个误差的大小可根据实际需要而定。
(2) 算法的时间复杂性, 也就是算法的速度。
(3) 算法的空间复杂性, 即算法运行过程所需要的内存空间的大小。
2 光栅直线算法
光栅显示器可以看作是一个像素的矩阵,在光栅显示器上显示任何一个图形,实际上都是一些具有一种或多种颜色和灰色像素的集合。由于光栅图形只是近似的实际图形,如何使光栅图形最完美的逼近实际图形,便是光栅图形学要研究的内容。
数字设备画直线是通过画直线两个端点间的各个离散的点来完成。每个分散的点的位置通过直线方程来计算。对于光栅显示系统,直线颜色装载在相应象素位置的帧缓存中。屏幕坐标只能为整数,因此,画点的位置只能近似实际直线上点的位置。例如计算的点的位置(10.48,20.51)近似为(10,21)。这样画出的直线会出现锯齿样,在低分辨率的显示系统上尤其明显。
数学上的直线是没有宽度的,是无数个点构成的集合,显然,光栅显示器只能近似的显示直线。当我们对直线进行光栅显示时,需要在显示器有限个像素中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换,又称光栅化。
由于在一个图形中,可能包含成千上万条直线,所以要求绘制算法应可能的快。为比较三种光栅直线算法,下面先后介绍三种算法的基本原理与实现方法。
2.1 数值微分法(DDA算法)
DDA是数值微分分析式(digitaldifferentialanalyzer)的缩写,是根据直线增量来产生直线的,DDA算法的本质是用数值方法解微分方程,通过同时对x和y各增加一个小增量,计算下一步的x,y值。
DDA算法具体实现的方法:已知过端点P0 (x0, y0), P1(x1, y1)的直线段
L:y=kx+b
直线斜率为
先考虑|k| ≤1的情形。在这种情况下,x每增加1,y最多增加1。
即:当x每递增1,y递增k(即直线斜率);
当 |k|1时,必须把x,y地位互换
在这种情况下,y每增加1,x最多增加1。
即:当y每递增1,x递增1/k(即直线斜率倒数);
上面是从左端点开始计算的,若以右端点作为起始点
当|k| ≤1时:取Dx=-1, yi+1=yi-k
当|k|≥1时:取Dy=-1, xi+1=xi-1/k
2.2 中点直线算法
假定直线斜率k在0~1之间,当前像素点为(xp,yp),则下一个像素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个像素点;当M在Q的上方时,则取P1为下一个像素点。这就是中点画线法的基本原理。
图1. 中点画线法每步迭代涉及的像素和中点示意图
下面讨论中点画线法的实现。过点(x0,y0)、(x1,y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下方,只要把M代入F(x,y),并判断它的符号即可。为此,我们构造判别式: d=F(M)=F(xp+1, yp+0.5)=a(xp+1)+b(yp+0.5)+c
所以:
当d0时,M在L(Q点)上方,取P1为下一个象像素;
当d=0时,选P1或P2均可,约定取P1为下一个象素;
注意到d是xp, yp的线性函数,可采用增量计算,提高运算效率:
若当前像素处于d=0情况,则取正右方像素P1(xp+1, yp),要判下一个像素位置,应计算 d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a,增量为a。
若d0时,则取右上方像素P2(xp+1, yp
您可能关注的文档
- 螺杆空压机主机大修要点.doc
- 高中英语作文常用高分词汇.pdf
- 爱心驿站管理办法.doc
- 14年6月心理咨询室工作总结.doc
- 螺杆式空压机大修方案.doc
- 2023年中考英语作文预测及范文十篇.doc
- 2023年中考英语作文热点预测及参考范文.doc
- 物品交接交接清单格式.xls
- 第五版FMEA表单模板(DFMEA&PFMEA).xls
- PFMEA第五版表格模板 自己整理(带实例)--2020.2.3.xls
- 市科技局副局长在理论学习中心组学习2025年全国两会精神研讨发言材料.docx
- 在深入贯彻中央八项规定精神学习教育读书班开班式上的讲话1.docx
- 关于开展深入贯彻中央八项规定精神学习教育的工作方案.docx
- 市国资委党委书记学习2025年全国两会精神专题研讨发言材料.docx
- 在2025年作风建设专题“读书班”上的研讨发言材料(八项规定).docx
- 在县政府全体会议暨廉政工作会议上的讲话4.docx
- 关于我市农村电商发展情况的调研报告.docx
- 在某某区安全生产重点工作安排部署会上的讲话.docx
- 市发改局党组书记在理论学习中心组会上学习2025年全国两会精神的研讨发言材料1.docx
- 商务局委员会(商务局)基层党组织“分类指导、争先进位”工作方案.docx
文档评论(0)