计算机图形学课件 第3章 二维线画图元的生成.pptVIP

计算机图形学课件 第3章 二维线画图元的生成.ppt

  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文档。上传文档
查看更多
计算机图形学课件 第3章 二维线画图元的生成

第3章 二维线画图元的生成;象素;本章主要内容;3.1 简单的二维图形显示流程图;3.1 简单的二维图形显示流程图 3.2 扫描转换直线段 3.3 圆弧、椭圆弧扫描转换 3.4 生成圆弧的正负法 3.5 线画图元的属性控制;求与直线段充分接近的像素集 两点假设 直线段的宽度为1 直线段的斜率: ;条件: 待扫描转换的直线段: 斜率: 直线方程: 直接求交算法: 划分区间[x0,x1]: 计算纵坐标: 取整:;DDA算法;Void LineDDA(int x0,int y0, int x1,int y1,int color) /*假定x0x1, -1=m=1*/ { int x; float dy,dx,y,m; dx=x1-x0; dy=y1-y0; m=dy/dx; y =y0; for(x=x0;x=x1;x++) { PutPixel(x,(int)(y+0.5),color); y+=m; } }/*DDA算法程序结束*/;目标:消除DDA算法中的浮点运算 浮点数取整运算,不利于硬件实现; DDA算法,效率低 条件: 同DDA算法 斜 率: 直线段的隐式方程((x0,y0)(x1,y1)两端点,其中 x1≧x0) F(x,y)=ax+by+c=0 式中 a=y0-y1, b=x1-x0, c=x0y1-x1y0; 直线的正负划分性;P;P;d的初始值 d0=F(x0+1,y0+0.5)=F(x0,y0)+a+0.5b 因(X0,Y0)在直线上,F(x0,y0)=0, 所以,d0=a+0.5b d的增量都是整数,只有初始值包含小数,可以用2d代替d, 2a改写成a+a。 算法中只有整数变量,不含乘除法,可用硬件实现。; void Midpointline(x0,y0,x1,y1,color) int x0,y0,x1,y1,color; { int a,b,d1,d2,d,x,y; a = y0-y1; b = x1- x0; d = a+a+b; d1 = a+a; d2 = (a+b)+(a+b); x = x0; y = y0; PutPixel(x,y,color); while (xx1) { if (d0) { x++; y++; d +=d2;} else { x++; d +=d1;} PutPixel(x,y,color); } };本章主要内容;3.3 扫描转换圆弧;; 圆弧的正负划分性;3.3.2 生成圆弧的中点算法;P;构造判别式;所以:初始化运算d0 = 1.25 – R 对应于 e0= 1- R 判别式 d 0 对应于 e -0.25 又因为:e的初值e0为整数,运算过程中的分量也为整数, 故e始终为整数 所以: e -0.25 等价于 e 0 程序如下(完全用整数实现):;3.3.3 椭圆的扫描转换;在上半部分,法向量的y分量大 在下半部分,法向量的x分量大;椭圆的中点画法; 根据d1的符号来决定下一像素是取正右方的那个,还是右下方的那个。 若d1<0, 中点在椭圆内,取正右方象素,判别式更新为: d1=F(xp+2,yp-0.5)=d1+b2(2xp+3) d1的增量为b2(2xp+3) 当d1≥0, 中点在椭圆外,取右下方象素,更新判别式: d1=F(xp+2,yp-1.5)=d1+b2(2xp+3)+a2(-2yp+2) d1的增量为b2(2xp+3)+a2(-2yp+2);d1的初始条件: 椭圆弧起点为(0,b),第一个中点为(1,b-0.5) 初始判别式:d10=F(1,b-0.5)=b*b+a*a(-b+0.25) 转入下一部分,下一象素可能是一正下方或右下方,此时判别式要初始化。 d2 = F(xp+0.5,yp-1) = b2(xp+0.5)2+a2(yp-1)2-a2b2 若d20,则d2’= F(xp+1.5,yp-2) = d2 + b2(2xp+2)+a2(-2yp+3) 若d2=0,则d2’= F(xp+0.5,xp-2) = d2 + a2(-2yp+3) 下半部分弧的终止条件为 y = 0;程序:MidpointEllipe(int a, int b, int color) { int x,y; float d1,d2; x = 0;

文档评论(0)

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

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

1亿VIP精品文档

相关文档