Welcome

首页 / 软件开发 / 数据结构与算法 / 算法系列(十三) 椭圆的生成算法

算法系列(十三) 椭圆的生成算法2014-04-30 csdn博客 吹泡泡的小猫椭圆和直线、圆一样,是图形学领域中的一种常见图元,椭圆的生成算法(光栅转换算法)也是图 形学软件中最常见的生成算法之一。在平面解析几何中,椭圆的方程可以描述为(x – x0)2 / a2+ (y – y0)2 / b2 = 1,其中(x0, y0)是圆心坐标,a和b是椭圆的长短轴,特别的,当(x0, y0)就是坐标 中心点时,椭圆方程可以简化为x2 / a2 + y2 / b2 = 1。在计算机图形学中,椭圆图形也存在在点阵 输出设备上显示或输出的问题,因此也需要一套光栅扫描转换算法。为了简化,我们先考虑圆心在原 点的椭圆的生成,对于中心不是原点的椭圆,可以通过坐标的平移变换获得相应位置的椭圆。

在进行扫描转换之前,需要了解一下椭圆的对称性,如图(1)所示:

图(1)椭圆的对称性

中心在原点。焦点在坐标轴上的标准椭圆具有X轴对称、Y轴对 称和原点对称特性,已知椭圆上第一象限的P点坐标是(x, y),则椭圆在另外三个象限的对称点分别是 (x, -y)、(-x, y)和(-x, -y)。因此,只要画出第一象限的四分之一椭圆,就可以利用这三个对称性 得到整个椭圆。

在光栅设备上输出椭圆有很多种方法,可以根据直角平面坐标方程直接求解点 坐标,yekeyii利用极坐标方程求解,但是因为涉及到浮点数取整,效果都不好,一般都不使用直接求 解的方式。本文就介绍几种计算机图形学中两种比较常用的椭圆生成方法:中点画椭圆算法和 Bresenham椭圆生成算法。

1、  中点画椭圆法

中点在坐标原点,焦点在坐标轴上 (轴对齐)的椭圆的平面集合方程是:

x2 / a2 + y2 / b2 = 1,也可以转化为如下非参数化 方程形式:

F(x, y) = b2x2 + a2y2 - a2b2 = 0                  (方程 1)

无论是中点画线算法、中点画圆算法还是本节要介 绍的中点画椭圆算法,对选择x方向像素Δ增量还是y方向像素Δ增量都是很敏感的。举个例子,如果 某段圆弧上,x方向上增量+1个像素时,y方向上的增量如果 < 1,则比较适合用中点算法,如果y 方向上的增量 > 1,就会产生一些跳跃的点,最后生成的光栅位图圆弧会有一些突变的点,看起来 好像不在圆弧上。因此,对于中点画圆弧算法,要区分出椭圆弧上哪段Δx增量变化显著,哪段Δy增 量变化显著,然后区别对待。由于椭圆的对称性,我们只考虑第一象限的椭圆圆弧,如图(2)所示:

图(2)第一象限椭圆弧示意图