椭圆的生成算法_中点椭圆算法
考虑标准位置的椭圆在四分象限中是对称的,因此我们必须计算一个象限中椭圆曲线的像素位置,在由对称性得到其他象限的像素位置,如下图

中点椭圆算法
首选确定以原点为中心的标准位置椭圆上的点x,y,然后将这些点平移到以xc,yc为中心的椭圆上
中点椭圆算法将分为两部分应用与第一象限,划分的一句是斜率的具体对小于 1 在 x 轴取单位不长,在斜率绝对值大于 1 的区域在 y 轴取单位步长来处理第一象限内的像素点位,如下图所示

可以从位置0,ry开始,在第一象限内沿着椭圆路径顺时针绘制,当斜率便于-1 时,将 x 方向的单位步长转为 y 方向的单位步长。
利用并行处理器,则可以同时计算两个区域内的像素位置
取椭圆的中心点为0,0, 则椭圆的定义函数表示为
rxx−xc2+ryy−yc2=1
fellipse=ry2x2+rx2y2−rx2ry21
决策函数为:
⎩⎨⎧fellipse<0在椭圆边界内fellipse=0在椭圆边界上fellipse>0在椭圆边界外
从0,ry开始,在 x 方向取单位步长到区域的分界处,也就是斜率为-1 的点,然后转为 y 方向的单位步长,覆盖完第一象限内的所有点位,在每一步中,需要检测曲线的斜率值,
有 1 式可以计算斜率为
dxdy=−2rx2y2ry2x
在区域交界处有dy/dx=−1则2ry2x=2rx2y
因此在区域1存在2ry2x<2rx2y
在区域2存在2ry2x>=2rx2y
如同圆一样,假设刚在xk,yk上绘制了一个像素,下一个像素的位置则为xk+1,yk或者xk+1,yk−1, 看那个更接近圆,也就是距离xk+1,yk−21那个更近
p1k=ry2xk+12+rx2yk−212−rx2ry2
在区域1内下一个取样位置为xk+1=xk+2
p1k<0,时p1k+1=ry2xk+22+rx2yk+1−212−rx2ry2
p1k>=0,时p1k+1=ry2xk+22+rx2yk+1−212−rx2ry2
{p1k<0时p1k+1−p1k=2ry2xk+1+ry2p1k>=0时p1k+1−p1k=2ry2xk+1+ry2−2rx2yk+1
在区域2内
p2k=ry2xk+212+rx2yk−12−rx2ry2
在区域2内下一个取样位置为yk+1=yk−2
p2k<0,时p2k+1=ry2xk+1+212+rx2yk−12−rx2ry2
p2k>=0,时p2k+1=ry2xk+1+212+rx2yk−22−rx2ry2
生成算法如下
- 输入rx,ry,得到椭圆的第一个点0,ry
- 计算区域1的决策制的初始值p10=ry2−rx2ry+41rx2
- 在区域1中的每个x_k位置,从k=0,完成下述
如果p1k<0,下一个点为xk+1,yk,p1k+1=p1k+2ry2xk+1+ry2
否则 下一个点为xk+1,yk−1,p1k+1=p1k+2ry2xk+1+ry2−2rx2yk+1
直到2ry2x>=2rx2y - 使用区域1中计算出的最后一个点x1,y1为开始点来计算区域2的初始值p20=ry2x1+212+rx2y1−12−rx2ry2
- 在区域1中的每个y_k位置,从k=0,完成下述
如果p2k<0,下一个点为xk,yk−1,p2k+1=p2k−2rx2yk+1+rx2
否则 下一个点为xk+1,yk−1,p2k+1=p2k+2ry2xk+1+rx2−2rx2yk+1
直到y=0
请参考中点画椭圆算法