计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(上)

中点椭圆算法(上)

       这里的方法类似于显示光栅圆。给定参数rx,ry和(xc,yc),首先确定以原点为中心的标准位置椭圆上的点(x,y),然后将这些点平移到以(xc,yc)为中心的椭圆上。如果希望显示不在标准位置的椭圆,那么就绕中心坐标旋转并对长轴和短轴重新定向。但目前仅考虑显示标准位置的椭圆,第4章将讨论变换对象方向和位置的通用方法。

       中点椭圆算法将分成两部分应用于第一象限。图3.25给出了依据rx<ry的椭圆斜率对第一象限进行的划分。并通过在斜率绝对值小于1的区域内在x方向取单位步长,以及在斜率绝对值大于1的区域内在y方向取单位步长来处理这个象限。


       区域1和区域2(参见图3.25)可以通过多种方法进行处理。可以从位置(0,ry)开始,在第一象限内沿椭圆路径顺时针步进,当斜率变为小于-1时,将x方向的单位步长转化为y方向的单位步长。反过来,也可以从(rx,0)开始,以逆时针方式选取点,并当斜率大于-1时,将y方向的单位步长改为x方向的单位步长。利用并行处理器,则可同时计算两个区域内的像素位置。作为中点椭圆算法串行实现的例子,则以(0>ry)为起点,在第一象限内顺时针沿椭圆路径步进。

       在方程(3.37)中,取(xc, yc) = (0 > 0),定义椭圆函数为


 

该函数具有下列特性:

 

 

       因此,椭圆函数fellipse(x,y)作为中点算法的决策参数。在每个取样位置,根据椭圆函数沿椭圆轨迹对两个候选像素间中点求值的符号来选择下一个像素。从(0, ry)开始,在x方向取单位步长直列区域1和区域2之间的分界处(参见图3.25 );然后转换成y方向的单位步长,再覆盖第一象限剩余的曲线段。在每一步中,需要检测曲线的斜率值。

椭圆的斜率可从方程(3.39)中计算得出:

 

在区域1和区域2的交界区,dy/dx -1,且

 

因此,移除区域1的条件是

 

 

    图3 .26给出了第一象限内取样位置xk+l处两个候选像素间的中点。假如在前一步中选择了位置(xk,yk),便可通过该中点对决策参数(即椭圆函数( 3.39)式)求值来确定沿椭圆轨迹的下一个位置:

 

 

如果P1k<0,那么中点位于椭圆内,扫描线yk.上的像素更接近于椭圆边界。否则,中点在椭圆之外,或在椭圆边界上,所选的像素应在扫描线yk-1上。

 

在下一个取样位置(xk+1+1= xk+2),区域1的决策参数可求值为

 

 

其中,yk+1根据p1k的符号取值为yk或,yk-1

    决策参数以下列增量递增:

 

如同画圆算法,决策参数的增量计算仅需使用加减运算,因为2r2yx和2r2xy,的值也可以通过递增而得到。在起始位置(0, ry),这两项可以计算为

 

当x和y递增时,通过将等式(3.45)加上2r2xy以及将等式(3.46)减去2r2yx就得到更新值。对每一步的更新值进行比较,当满足条件(3.42)式时,就从区域1移向区域2。在区域1中,决策参数的初始值可以通过椭圆函数在起始点(xo,yo)=(0,ry)求得:

 

 

        在区域2中,在负y方向以单位步长取样。每一步都将计算并得到水平像素间的中点(参见图3.27)。对于该区域,决策参数将求值为

 


如果p2k> 0,中点位于椭圆边界之外,则选择xk处的像素;如果p2k< = 0,中点位于椭圆边界之内或之上,我们选择xk+1处的像素。

    为了确定区域2中连续的决策参数间的关系,我们在下一个取样步骤yk+1-1 = yk-2对椭圆函数

求值:

 

 

其中,xk+1的设置根据p2k的符号可取值为xk或xk+1。

    当进入区域2时,其初始点(x0,y0)就是在区域1中选择的最后位置,那么区域2的初始决策参数为

 

为了简化p20。的计算,以顺时针方向从认(rx,0)开始选择像素位置。然后以正y方向取单位步长,直到区域1中选择的最后位置。

    使用方程(3.36)并计算整个椭圆轨迹的像素位置,就能使中点算法适用于生成非标准位置的椭圆。另外,以后讨论的变换方法将椭圆轴重新定向到标准位置,应用中点算法来确定曲线位置,然后将计算出的像素位置转换成沿原始椭圆轨迹的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值