直线算综述.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
直线算综述

南昌大学 学生姓名:陈 凯 学号:405906111033 学 院:机电工程学院 专 业:机械设计及理论 论文题目:直线生成算法文献综述 2012年9月14日 直线生成算法综述 陈凯 (南昌大学机电工程学院 江西南昌 330031 ) 摘要:本文对现有的直线生成算法进行综述,介绍了各种算法的原理、优缺点、算法基础等。详细说明了基于并行填充模式的直线生成算法,并以此为例子比较了其与Bresenham算法的效率和误差大小,综述了各种算法的适用条件。 关键字:直线算法 并行填充模式 Bresenham算法 引言 直线是光栅图形学中最基本的元素之一, 直线生成算法的效率和质量直接影响着图形应用系统的效率和质量。直到最近几年,为了提高直线的绘制速度, 仍然有大量的研究工作出现。这些工作集中在如何一次生成位于直线上尽可能多的像素,在计算机中生成直线的常用算法有数值微分法(DDA)、中点画线法和1965年出现的Bresenham算法。其中Bresenham算法是依据直线的斜率,快速生成直线,这种算法在直线段接近坐标的时候有很高的效率,但是随着斜率的增大, 其效率会显著下降。 以上所说的各种直线生成算法的特点都是一次生成尽可能的像素的数目。但是, 若增加每次生成像素的数量, 则会由于pattern数量过多, 造成对误差值判断操作次数增加, 致使直线生成的效率反而会下降。因此本文查看了大量的文献,找出了生成直线的其余常用算法,对常用的直线生成算法进行综述,并评价其各自的优缺点。 正文 1、对称式八步直线生成算法 由Bresenham 直线生成算法的基本思想可知, 生成的下一个像素与当前像素之间存在两种关系——沿轴向或沿斜向。 如当前像素点为P, 则下一个像素点只能选择轴向或者斜向的下一个邻近像素点。若使用4个像素的生成模式来生成直线, 即当n= 4时, 可以将直线依据其斜率划分为六类, 那么通过研究可供选择的生成模式集,每一种被选取的生成模式与这些直线的斜率范围的关系我们发现,直线的斜率不同, 其可选模式构成的模式集也不同;每类直线可供选择的生成模式集中均包含五种生成模式;直线的斜率决定了生成该直线时可供选择的生成模式集。而从生成模式集中具体选择哪一个生成模式[1], 则要由误差的大小来判定。由于线段具有中点对称性,当我们使用4像素生成模式来生成直线时, 结合直线的中点对称性, 分别从线段的两端沿直线向中点方向对称生成直线, 一次计算即可生成八个像素点, 从而可以极大地提高直线生成算法的效率。这就是对称式八步直线生成算法的基本原理。 2、基于并行填充模式的直线生成算法 通过分析发现, 对于一般斜率不为1的直线, 在每个象素行上通常有若干个象素点, 而且每个象素行上重复的象素点数基本相同, 具有一定的规律。此若干个象素点可预先计算出来,并一次写入帧缓冲区中同时点亮。目前的图形存储器芯片都支持块写方式, 如果能并行的一次写入一个循环单位的象素点数, 就可大大提高图形的生成速度,同时算法本身的复杂度降低。因此就可以将算法的注意力由单个的象素点的计算、估测转移到象素点重复个数即Pattern的计算。当直线斜率较小时, 此时一次并行写入并且点亮的象素点数很多, 直线生成的速度将显著提高。 设直线斜率m=, 先考虑m 1 的情况[2]。直线沿x 轴方向的增量,由于沿y 轴方向的单位长度增量为1, 所以, 则 =, 此时的 即为直线在y轴单位长度上沿x 轴方向的增量,设Pattern 为每行的象素点数, 那么有Pattern=。 当恰为整数时, Pattern是一个固定的单一的值, 即每行重复的象素点数相同。当不为整数时,Pattern应取接近的整数值, 或为[]小于的整数,或为[]+1大于的整数。直线与若干象素行相交, 则这些象素行上按Bresenham 算法被点亮的象素数目或者相等或者相差1。此时每行重复的Pattern 虽值不相同, 但具有一定的基本规律。 基于这种思想, 我们考虑将每行点亮若干象素后的剩余长度作为偏差e。设第j 步计算偏差在第j 行被点亮的象素区域的右端点处进行, 我们定义第j 步的偏差 为按步长k点亮了k个象素后最后被点亮的象素距该行象素区域的右端点的距离。因为每相邻行上被点亮的象素区域恰好是首尾相接的, 所以第j 行象素区域左端点距离该行上第一个被点亮的象素点的距离为1- ( 为第j - 1 行的偏差)。则有: =-(k-1)-(1-)。根据上面的思想, 若1,则在右端继续点亮一个象素,同时偏差减1,=。

文档评论(0)

h0r3d7m + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档