(7)椭圆的生成之中点画椭圆法

椭圆的特性

以中心在原点,长半轴为a,短半轴为b的标准椭圆为例。


根据椭圆的对称性,只需讨论第一象限内的1/4椭圆弧的生成即可。


第一象限内的1/4椭圆弧的像素分布情况:



以弧上斜率为-1的点作为分界,将第一象限内的1/4椭圆弧分为上、下两半部分:


上半部分(斜率大于–1):在x方向取单位步长,来确定下一个像素的位置;

下半部分(斜率小于–1):在y方向取单位步长,来确定下一个像素的位置。

改为形式:F (x, y) =b2x2+a2y2-a2b2= 0     (1式) 


已知标准位置的椭圆方程为:X2/a2+y2/b2=1

在上半部分和下半部分的交界处,法向量的x和y方向两个分量相等,则满足:


即:2b2x = 2a2y

上半部分的条件是:2b2x < 2a2
下半部分的条件是:2b2x >= 2a2y


中点画椭圆法


1/4椭圆弧的上半部分:
设当前已确定的椭圆弧上的像素点为P (xp, yp),则下一对候选像素为正右方H和右下方D,H和D的中点为(xp+1, yp–0.5)
将中点代入1式,构造判别式为:
            d = F(xp+1, yp–0.5) = b2(xp+1)*(xp+1) + a2(yp–0.5)*(yp–0.5) – a2b2
若d<0,则中点在椭圆内,取正右方像素H,且判别式应更新为:
          d1 = F(xp+2, yp–0.5) = b2(xp+2)*(xp+2) + a2(yp–0.5)*(yp–0.5) – a2b2
              = (b2(xp+1)*(xp+1) + a2(yp–0.5)*(yp–0.5) – a2b2) + b2(2xp+3)
              = d + b2(2xp+3)
所以沿正右方向,判别式d 的增量为b2(2xp+3)

若d≥0,则中点在椭圆外,取右下方像素D,且判别式应更新为:
        d1 = F(xp+2, yp–1.5) = b2(xp+2)*(xp+2) + a2(yp–1.5)*(yp–1.5) – a2b2
            = (b2(xp+1)*(xp+1) + a2(yp–0.5)*(yp–0.5) – a2b2) + a2(-2yp+2)
            = d + b2(2xp+3) + a2(-2yp+2)
所以沿右下方向,判别式d 的增量为b2(2xp+3)+a2(-2yp+2)
上半部分判别式 d 的初始值:
弧起点为(0, b),则第一个中点为(1, b–0.5),对应的判别式:
       d0 = F(1, b–0.5) = b2+a2(b–0.5)*(b–0.5)–a2b2 = b2+a2(–b+0.25)  
注意:在生成1/4椭圆弧的上半部分时,每步迭代中,必须随时计算和比较从上半部分转入下半部分的条件是否成立。 


1/4椭圆弧的下半部分:
下半部分的步进方向由 x 改为 y。
设当前已确定的像素点为P(xp, yp),则下一对候选像素为正下方V和右下方D的两个像素。

V和D的中点为(xp+0.5, yp–1),将中点代入1式,构造判别式为:
          d = F(xp+0.5, yp–1) = b2(xp+0.5)*(xp+0.5) + a2(yp–1)*(yp–1) – a2b2
若d≤0,则中点在椭圆内,取右下方像素D,且判别式应更新为:
          d1 = F(xp+1.5, yp–2) =b2(xp+1.5)*(xp+1.5) + a2(yp–2)*(yp–2) – a2b2
              = (b2(xp+0.5)*(xp+0.5) + a2(yp–1)*(yp–1) – a2b2) + a2(-2yp+3)
              = d +b2(2xp+2) +a2(-2yp+3)
所以沿右下方向,判别式d 的增量为b2(2xp+2) + a2(-2yp+3)
若d>0,则中点在椭圆外,取正下方像素V,且判别式应更新为:
        d1 = F(xp+0.5, yp–2) = b2(xp+0.5)*(xp+0.5) + a2(yp–2)*(yp–2) – a2b2
            = ( b2(xp+0.5)*(xp+0.5) + a2(yp–1)*(yp–1) – a2b2) + a2(-2yp+3)
            = d +a2(-2yp+3)
所以沿正下方向,判别式d 的增量为a2(-2yp+3)

下半部分判别式 d 的初始值:
如果在上半部分所选择的最后一个像素为(x, y),则下半部分的判别式 d 的初始值就在 (x+0.5, y–1) 处计算,即:
            d0 = F(x+0.5, y–1) =b2(xp+0.5)*(xp+0.5) + a2(yp–1)*(yp–1) – a2b2
注意:下半部分椭圆弧的终止条件是 y=0。     




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值