网站大量收购独家精品文档,联系QQ:2885784924

三讲 二维图形生成算法.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
三讲二维图形生成算法ppt课件

二维图形生成算法 线段的扫描变换 线段的扫描变换 象素,中心位于均衡栅格上的离散圆点 。 直线扫描变换算法就是获得一系列象素的坐标,使这些象素落在所要近似的理想直线上或位于该直线的附近。原则上讲,象素序列应尽可能逼近理想的直线,而且尽可能直一些。 基本增量算法 基本增量算法 增量算法的定义:每一步都是根据前一步进行增量计算。这种算法通常被称作数值微分(DDA)算法。DDA(Digital Differential Analyzer algorithm)是用数值方法解决微分方程的一种手段 。 请注意如果|m|1,则x的步进会使y的步进超过1,此时,如果采用上述算法将会使得点亮的象素个数太少,画出来的线没有很好的模拟理想直线,例如:从(0,2)点到(2,100)点画线,则会只点亮3个点来表示,光栅点太稀了。解决办法是颠倒x与y的位置,给y以单位增量,而x的增量为Δx=Δy/m=1/m,即取x轴和y轴中变化最快的轴作为参考轴以保证直线被光栅化后有足够多的象素。 基本增量算法的实现 #includegraphics.h/*加入c图形库*/ #includemath.h/*数学库*/ #includeconio.h/*键盘控制*/ void Line(int x0,int y0,int x1,int y1,int value) /*从坐标(x0,y0)到(x1,y1)画颜色为value的直线*/ { int x; float dx,dy,m,y; dx=x1-x0; dy=y1-y0; m=dy/dx;/*取得斜率*/ y=y0; for(x=x0;x=x1;x++) { putpixel(x,(int)(y+0.5),value);/*找到距理想直线最近的点,putpixel为画点函数*/ y=y+m; /*计算下一步的y值,增幅为m*/ } } 基本增量算法 考虑基本增量算法是否是最优的! 1.运算符的快速性 采用增量思想的DDA算法,每计算一个象素,只需计算一个加法。加法已经是最快的算法了(加减乘除开方三角函数等) 2.参数运算的快速性 DDA算法的计算中含有浮点数运算。把浮点运算的加法变成整数加法,因为整数的加法比浮点的加法要快很多 中点线算法 中点线算法 中点线算法的目的在于改进DDA算法,使得只采用整形变量参加运算。 假设当前为old点,下一点为new点,则有: dold=a·(xp+1)+b·(yp+1/2)+c 如果选择的是E,M?在x方向增加一个步长,那么: dnew=F(xp+2,yp+1/2)=a(xp+2)+b(yp+1/2)+c dnew=dold+a 用ΔE表示选择E后加入到d的增量,则ΔE=a=dy。 如果选择的是NE,那么M’在x方向和y方向上均需增加一个步长,那么: dnew=F(xp+2,yp+3/2)=a(xp+2)+b(yp+3/2)+c dnew=dold+a+b 用ΔNE表示选择NE后加入到d的增量,则 ΔNE=a+b=dy?dx。 增量初始值的计算 因为第一个象素是端点(x0,y0),可直接计算d的初始值dstart,以此决定是选E还是NE。第一个中点在(x0+1,y0 +1/2)处,有: dstart=F(x0+1,y0+1/2)=a(x0+1)+b(y0+1/2)+c =ax0+by0+c+a+b/2 =F(x0,y0)+a+b/2 由于(x0,y0)在线上,因此F(x0,y0)=0;故 dstart=a+b/2=dy-dx/2。 对DDA的改进 为消除分数部分,将F乘上2重新定义F:F(x,y)=2(ax+by+c),使每个常量和判断变量均乘上2,但这并不影响判断变量d的符号,因此仍可作为中点检测的标准。 最终结果:每一步dnew值的计算只需做简单的加法,无需耗时的乘法。 中点线算法举例 中点线算法 改进:中点算法进一步把效率提高到每步只做一个整数加法,如果再想在算法的效率上作文章已经是不可能了。但是DDA和中点算法严格依赖直线方程,不能再推广。而下面讲述的Bresenham画线算法不但能解决直线的光栅化,还能解决圆弧、抛物线甚至自由曲线的光栅化问题,使算法的覆盖域扩大。 Bresenham算法 Bresenham算法 令e=d-0.5。 则当e?0时,下一象素的y坐标增加1,而当e?0时,下一象素的y坐标不变。e的初值为-0.5。 从而利用e代替d,来判断下一点的取舍 圆的扫描变换 圆的扫描变换(中点算法) 椭圆的扫描变换(中点算法) 曲线DDA算法 * 二维图形生成算法 线段的扫描变换 基本增量算法 中点线算法 Bresenham画线算法 圆与椭圆的扫描变换 直线方程:y=mx+b ,0m1, m= △y/ △x= △y ; ?x

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档