- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
椭圆生成算法的研究
本文由天空乐园校园二手网整理分享
摘要
作为计算机图形学中基本几何元素之一的椭圆,其生成算法在几乎所有计算机图形学相关领域都要用到,尤其在计算机辅助设计中经常涉及。因此,研究椭圆生成对计算机图形系统十分重要。目前,已有大量的文献讨论了如何高效生
成误差小的椭圆。文献一中方法之一在扫描转换的同时复制椭圆宽度数个像素,这种方法比较简单,但造成椭圆切线斜率接近-1处显得很细。文献一中方法之二扫描转换两个同心的椭圆,内椭圆的两个半径分别为a-w/2,b-w/2 ;外椭圆的两个半径为 a +w/2 ,b + w/2;然后填充它们间的间隙,在微分几何中有一个结论:沿着垂直椭圆弧的方向,将此椭圆上的点移动w/2的距离所形成的曲线与原椭圆同心的椭圆,而是由一个8次方程所描述的曲线,因此这种算法也有较大误差,特别是 a 的值接近于w时。然而,对这样8次函数进行扫描转换,计算量非常大。圆弧绘制生成宽椭圆算法与椭圆中点扫描转换算法复杂度相当,且生成的椭圆效果较好,视觉感受不到明显缺陷。
本文主要对计算机图形学、椭圆的生成算法的具体实现及其应用进行综述,并简要讨论。
关键词:计算机图形学 椭圆生成算法 并行生成算法 宽椭圆
1 一种宽椭圆生成算法
计算机辅助设计领域常涉及宽椭圆生成,宽椭圆生成算法的优劣直接影响
设计效果。为了生成一个圆心在原点的标准宽椭圆,每次用单像素宽的椭圆中点扫描转换算法,得到一个单像素宽椭圆上的一个点,填充一个以该点为中心,椭圆宽为直径的圆弧,扫描转换结束后,生成一个无明显视觉缺陷的第一象限12宽椭圆。
作为计算机图形学中基本几何元素之一的椭圆,其生成算法在几乎所有计算机图形学相关领域都要用到,尤其在计算机辅助设计中经常涉及。因此,研究椭圆生成对计算机图形系统十分重要。目前,已有大量的文献讨论了如何高效生
成误差小的椭圆。椭圆的扫描转换法[1]就是其中之一,该算法基于Da Silva 的算法[2],运用二阶偏差分Pitteway[3],Van Aken[4]、KAppel[5]等所用的一些技术,该算法生成的椭圆都是单像素宽的,而现实中更多时候要生成宽椭圆,宽椭圆一般定义为沿着垂直两半径为a、b 的椭圆弧的两方向,将此椭圆上的点移动2w 的距离所形成的两条曲线中间部分,为了生成宽椭圆,文献一中方法之一在扫描转换的同时复制椭圆宽度数个像素,这种方法比较简单,但造成椭圆切线斜率接近-1 处显得很细。文献一中方法之二扫描转换两个同心的椭圆,内椭圆的两个半径分别为2a ? w ,2b ? w ;外椭圆的两个半径为2a + w ,2b + w;然后填充它们间的间隙,在微分何中有一个结论:沿着垂直椭圆弧的方向,将此椭圆上的点移动2w 的距离所形成的曲线与原椭圆同心的椭圆,而是由一个8 次方程所描述的曲线[6],因此这种算法也有较大误差,特别是a 的值接近于w 时。然而,对这样8 次函数进行扫描转换,计算量非常大。圆弧绘制生成宽椭圆算法与椭圆中点扫描转换算法复杂度相当,且生成的椭圆效果较好,视觉感受不到明显缺陷。
1.1 算法基本思想
主要考虑中心在原点的标准椭圆,宽度为w,(abw,a,b,w∈z);对于中心不在坐标原点的椭圆,可先作相应的平移变换,变换为中心在原点的椭圆,把所得的像素坐标加上一个位移即可得到所求的像素坐标。此外,只讨论椭圆在第一象限内的生成算法,其他象限内的点利用椭圆的四分对称性即可得到。在第一象限内的四分之一椭圆分为两个区域来处理.两个区域之间以斜率为-1 的点(即法向量两个分量相等的点)作为分界。对于区域I,以点(0,b)为始点,x 方向单位长作为步长。向右生成曲线。假设当前扫描计算得到的点为批p0(x,y),扫描转换的下一个点p1 可能为=(x+1,y)或=(x+1,y-1),判断s1、s2 的中间点在椭圆的内还是外,选择下一个扫描点。
如果中点m 在内(m 点代入椭圆方程值小于1),则下一个点p1 为(x+1, y),否则为(x+1, y-1);当斜率变为小于-l 时,转向区域Ⅱ,此时以(a,0)为始点。y 方向作为单位步长,向左生成曲线。假设当前扫描计算得到的点为p0′(x,y),扫描转换的下一个点可能为s1′(x,y+1)或s2′(x-1,y+1),判断、的中间点m(x ? ,y+ )在椭圆的内还是外,选择下一个扫描点。如果中点在内,则下一个点p1′为(x,y+1)否则为(x-1,y+1)。以上简单介绍了椭圆中点扫描生成算法,接下来基于中点扫描算法来生成宽椭圆。宽椭圆生成算法思路:先以中点圆算法[1]生一个圆心在原点直径为w 的圆,填充该圆,然后以椭圆扫描转换算法[1]求得椭圆上的点,将填充的圆平移到扫描转换得到的各点处(如图1)。
图1 生成椭圆第一象限
1.2
文档评论(0)