- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
lesson03-直线生成算法,直线生成算法,直线的生成算法,直线和圆的生成算法,直线插补算法,直线拟合算法,直线检测算法,bresenham直线算法,dda算法画直线,三轴直线插补算法
基本图形生成算法 总体目标:掌握二维图形学的基本思想,理解二维图形生成的基本原理 掌握直线段的生成算法、反走样算法。 掌握圆弧的生成及线形的处理 掌握字符生成的的基本思想 基本概念 光栅显示器上显示的图形,称之为光栅图形。 确定最佳逼近图形的象素集合,并用指定的颜色和灰度设置象素的过程称为图形的扫描转换或光栅化。 二维图形的光栅化必须确定区域对应的象素集,将各个象素设置成指定的颜色和灰度,也称之为区域填充。 在光栅图形中,非水平和垂直的直线用象素集合表示时,会呈锯齿状,这种现象称之为走样(aliasing);用于减少或消除走样的技术称为反走样(antialiasing)。 2.1 直线生成 算法概述 2.1 直线生成 算法概述 2.1 直线生成 算法概述 2.1 直线生成 算法概述 2.1.1 直线的DDA 算法 2.1.1 直线的DDA 算法 DDA直线生成算法描述 DDA直线生成算法C描述 DDA直线生成算法小结 2.1.2中点画线法 2.1.2中点画线法 2.1.2中点画线法 注意到d是xp, yp的线性函数,可采用增量计算,提高运算效率。 ??? 若当前象素处于d=0情况,则取正右方象素P1(xp+1, yp),要判下一个象素位置,应计算 d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)+c=d+a,增量为a。 ??? 若d0时,则取右上方象素P2(xp+1, yp+1)。要判断再下一象素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ,增量为a+b。画线从(x0, y0)开始,d的初值 d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因? F(x0, y0)=0,所以d0=a+0.5b。 ??? 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数运算的算法程序。 2.1.2中点画线算法 void Midpoint Line (int x0,int y0,int x1, int y1,int color) { int a, b, d1, d2, d, x, y; ? a=y0-y1; b=x1-x0;d=2*a+b; ? d1=2*a;d2=2* (a+b); ? x=x0;y=y0; ? drawpixel(x, y, color); ? while (xx1) ? { if (d0)?? {x++;y++; d+=d2; } ??? else????? {x++; d+=d1;} ??? drawpixel (x, y, color); ? } /* while */ } /* mid PointLine */ 2.1.2中点画线算法演示 2.1.3 Bresenham直线生成算法原理 2.1.3 Bresenham直线生成算法原理 2.1.3 Bresenham直线生成算法原理 Bresenham直线生成算法描述 Bresenham直线生成程序 Bresenham直线生成算法小结 * 在计算机产生的图形中,用到大量的直线,画好直线是非常有意义的,其一般的准则是: 线条应该显得笔直:由连续点组成的直线要显示在离散网格的平面上,一定会有不经过网格的点,如左下图。在这种情况下,必须选择靠近直线的网格点来逼近这条直线。若选择的好,线就显得较直;否则就会较弯曲,如右下图。 直线端点位置应该准确:画出的线段如果不准确,往往会使两条线之间不能很好的镶接,如右图。 直线浓度应该均匀:线段的浓度与单位线段中所显示的点数成正比。要保持线段的浓度均匀端点应该等距分布。只有严格平行和成45°的线才能做到。 直线浓度应该与线段的长度和斜率无关:要取得均匀的线段浓度,应该保持每单位长度的点数是个常数。一般,采用线段的近似长度,以及生成直线的算法,使在线段近似长度范围内保持线段浓度均匀。 显示线段的速度应快: 生成直线可用软件和硬件来实现,一般情况下,硬件要比软件实现得快。 直线常用的生成算法 数值微分(DDA:Digital Differential Analyzer )法 中点画线法 Bresenham算法 直线的微分方程表示为:dx/dy = △x/△y设直线的斜率小于等于1,起点坐标为(xa,ya),终点坐标为(xb,yb),则方程求解步骤分为:x0= xa +0.5,xn=xn-1+1y0= ya +0.5,yn=yn-1+△y/△x其中:△x=xb -xa, △ y=yb-ya上述解表示x方向积分步长为1,y方向增量为△y/△x。 yn-1 y x yn xn-1 xn △y/△x x yn-1 y yn
文档评论(0)