水平位移与对角位移.DOC

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
水平位移与对角位移

一种快速圆弧绘制算法(? 程 锦, 陆国栋, 谭建荣 (浙江大学 CADCG国家重点实验室,浙江 杭州 310027) E-mail: chengjin_zju@ 摘要: 提出一种圆弧绘制算法.与传统的基于单个像素点的圆弧绘制算法不同,新算法每执行一次输出操作均可生成两个或多个像素点.该算法将圆弧离散轨迹看成是由一系列水平位移和对角位移构成,逐段找出并绘制这些位移,从而减少了圆弧绘制过程中所需的输出操作,有效地提高了圆弧绘制速度.实验结果表明,新算法与著名的Bresenham算法相比,圆弧绘制速度提高近一倍.进一步地,新算法可以推广到其他二次曲线的绘制中. 关 键 词: 圆弧绘制;Bresenham算法;离散轨迹;水平位移;对角位移 中图法分类号: TP391 文献标识码: A 圆弧是组成图形最基本的元素之一.圆弧生成算法的优劣对整个图形系统的效率和质量有着直接而重要的影响.由于目前人们所采用的显示器多为光栅扫描显示器,所以对圆弧绘制算法的研究也主要集中在选择距离实际圆弧最近的光栅点的整数型算法上.假定圆弧的圆心在坐标原点,圆弧半径为整数,由于圆的对称性,我们只需研究第2个八分区中圆弧的绘制,而其他7个八分区的圆弧可由对称性获得.Bresenham算法[1,2]和中点法[3,4]的每步x坐标增1,y坐标则根据决策参数的符号来决定是否减1.通过引入决策参数,这两种算法在生成圆弧的过程中,除初始化时要进行乘法运算外,都只需进行简单的整数加减法运算和移位操作,因而具有较快的圆弧绘制速度.Bresenham法和中点法每次循环只生成一个点,Wu和Rokne提出的两步画圆法[5]则可使每次循环生成两个点.该法每次循环前进两步,利用非参数曲线f(x,y)=0在光栅显示器上的离散轨迹所具有的性质,中间一点无须数学运算便可生成.两步法使得绘制圆弧所需的数学运算量减少了一半,但与此同时,生成圆弧所需的逻辑操作数目却大大增加了.实验结果表明,两步法并不能获得比单步法更快的绘制速度. 上述各种圆弧绘制算法每走一步生成一个或两个像素点,即所有像素点都是用画点命令逐个生成并显示的,我们称其为基于单个像素点的圆弧绘制算法.为了进一步提高圆弧绘制速度,Hsu,Chow和Liu等人提出了一个基于水平直线段的圆弧扫描转换算法[6],以下我们将其简称为HCL法.该算法基于以下事实:一段位于第2个八分区的45°圆弧的离散轨迹是由一系列具有相同y坐标的相邻像素点所构成的水平直线段组成的.如图1所示,为一段位于第2个八分区的圆弧,其圆心在坐标原点,半径为15个像素单位,圆弧起点坐标为(0,15).HCL法将该圆弧看成由5条水平小直线段Li(i=1,2,…,5)构成,这些直线段所具有的像素点数目依次为4、3、2、1、1,该法逐段找出这些水平直线段并用画线命令进行绘制.对于前3条水平直线段L1,L2和L3,由于它们所具有的像素点数目不小于2,故一次画线可以生成至少两个点,确实能够减少输出操作所需的执行时间.但对于L4和L5,由于这两条水平直线段已退化为单个像素点,HCL法却仍采用画线命令进行绘制,其绘制速度显然不如直接用画点命令输出单个像素点.这种退化水平直线段的客观存在决定了该算法并不能使圆弧绘制速度得到明显提高.尤其是对于那些半径较小的圆弧,由于其离散轨迹中已退化的水平直线段所占的比例较大,用HCL法进行绘制所需的时间往往会超出用Bresenham法等基于单个像素点的圆弧绘制算法进行绘制所需的时间. 本文通过对圆弧离散像素点的轨迹进行深入分析和研究,提出了一种快速圆弧绘制算法.该算法充分利用圆弧离散轨迹所具有的特性,先找出离散轨迹中各段水平位移与对角位移,然后用画线命令逐段进行绘制.新算法每执行一次输出操作都可以生成两个或两个以上的像素点,极大地减少了圆弧绘制过程中所需的输出操作,从而显著地提高了圆弧生成速度. 水平位移与对角位移 我们将如图1所示位于第2个八分区的圆弧在光栅显示器上的离散轨迹看成由两条水平直线段Lhi(i=1,2)和两条斜率为?1的对角直线段Ldj(j=1,2)构成,其中Lh1,Lh2,Ld1,Ld2所包含的像素点数目分别为4、2、2、3.因此,我们可以找出这些小直线段,并用画线命令进行绘制,从而每执行一次输出操作都可以生成至少两个像素点.由于在新算法绘制圆弧的过程中将水平方向和对角方向的小直线段作为基元,因此,我们将这两种直线段分别定义为水平位移和对角位移,记为Lhi和Ldj;并将其长度定义为各直线段所具有的像素点数目,分别记为lhi和ldj,则对于如图1所示的圆弧,我们有lh1=4,lh2=2,ld1=2,ld2=3.容易看出,用新算法绘制圆弧的关键在于决定何时由绘制水平位移转为绘制对角位移,并逐段求出这些水平位移和对角位移及其相

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档