算法之椭圆的生成算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
椭圆和直线、圆一样,是图形学领域中的一种常见图元,椭圆的生成算法(光栅转换算法)也是图形学软件中最常见的生成算法之一。在平面解析几何中,椭圆的方程可以描述为(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)第一象限椭圆弧示意图?定义椭圆弧上某点的切线法向量N如下:对方程1分别求x偏导和y偏导,最后得到椭圆弧上(x,y)点处的法向量是(2b2x, 2a2y)。dy/dx = -1的点是椭圆弧上的分界点。此点之上的部分(橙褐色部分)椭圆弧法向量的y分量比较大,即:2b2(x + 1) 2a2(y – 0.5);此点之下的部分(蓝紫色部分)椭圆弧法向量的x分量比较大,即:2b2(x + 1) 2a2(y – 0.5)。 对于图(2)中橙褐色标识的上部区域,y方向每变化1个单位,x方向变化大于一个单位,因此中点算法需要沿着x方向步进画点,x每次增量加1,求y的值。同理,对于图(2)中蓝紫色标识的下部区域,中点算法沿着y方向反向步进,y每次减1,求x的值。先来讨论上部区域椭圆弧的生成,如图(3)所示:图(3)中点画椭圆算法对上部区域处理示意图?假设当前位置是P(xi, yi),则下一个可能的点就是P点右边的P1(xi+1, yi)点或右下方的P2(xi+1, yi-1)点,取舍的方法取决于判别式di,di的定义如下:?di?= F(xi+1, yi-0.5) = b2(xi+1)2?+ a2(yi-0.5)2?– a2b2?若di? 0,表示像素点P1和P2的中点在椭圆内,这时可取P1为下一个像素点。此时xi+1?= xi?+ 1,yi+1?= yi,代入判别式di得到di+1:?di+1?= F(xi+1+1, yi+1-0.5) = b2(xi+2)2?+ a2(yi-0.5)2?– a2b2?= di?+ b2(2xi?+ 3)?计算出di的增量是b2(2xi?+ 3)。同理,若di?= 0,表示像素点P1和P2的中点在椭圆外,这时应当取P2为下一个像素点。此时xi+1?= xi?+ 1,yi+1?= yi?- 1,代入判别式di得到di+1:?di+1?= F(xi+1+1, yi+1-0.5) = b2(xi+2)2?+ a2(yi-1.5)2?– a2b2?= d1?+ b2(2xi+3) + a2(-2yi+2)?计算出di的增量是b2(2xi+3)+a2(-2yi+2)。计算di的增量的目的是减少计算量,提高算法效率,每次判断一个点时,不必完整的计算判别式di,只需在上一次计算出的判别式上增加一个增量即可。 接下来继续讨论下部区域椭圆弧的生成,如图(4)所示:图(4)中点

文档评论(0)

神话 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:5203223011000000

1亿VIP精品文档

相关文档