计算机图形学(孙家广.第三版)-第2章 123页-高清.pptxVIP

计算机图形学(孙家广.第三版)-第2章 123页-高清.pptx

  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文档。上传文档
查看更多

第2章光栅图形学;2.1直线段的扫描转换算法;2.1.1数值微分(DDA)法;计算yi+1=kxi+1+B;例:画直线段p(0,0)--P1(5,2);voidDDALine(intx0,inty0,intx1,inty1,intcolor)intx;

floatdx,dy,y,k;dx,=x1-x0,dy=y1-y0;k=dy/dx,y=y0;

for(x=x0;x x1,x++)

drawpixel(x,int(y+0.5),color);y=y+k;;2.1.2中点画线法;构造判别式:d=F(M)=F(xp+1,yp+0.5)

=a(xp+1)+b(yp+0.5)+c

其中a=y0-y1,b=x1-x0,c=x0y1-x1y0

当d0,M在L(Q点)下方,取右上方P2为下一个象素;当d0,M在L(Q点)上方,取右方P1为下一个象素;当d=0,选P1或P2均可,约定取P1为下一个象素;

d是xp,yp的线性函数,因此可采用增量计算,提高运算效率。;若当前象素处于d 0情况,则取正右方象素P1(xp+1,yp),要判下一个象素位置,应计算

d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)=d+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=a+0.5b。

可以用2d代替d来摆脱小数,提高效率。

令d0=2a+b,d1=2a,d2=2a+2b,我们有如下算法。;例:用中点画线法P0(0,0)P1(5,2);voidMidpointLine(intx0,inty0,intx1,inty1,intcolor)

{inta,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*/

}/*midPointLine*/;2.1.3Bresenham算法;设直线方程为: ,其中k=dy/dx。因为直线的起始点在象素中心,所以误差项d的初值d0=0。

X下标每增加1,d的值相应递增直线的斜率值k,即d=d+k。一旦d≥1,就把它减去1,这样保证d在0、1之间。;可以改用整数以避免除法。由于算法中只用到误差项的符号,因此可作如下替换:;voidBresenhamline(intx0,inty0,intx1,inty1,intcolor)

{intx,y,dx,dy;floatk,e;

dx=x1-x0,dy=y1-y0,k=dy/dx;e=-0.5,x=x0,y=y0;

for(i=0;i dx;i++)

{ drawpixel(x,y,color);x=x+1,e=e+k;

if(e 0)

{y++,e=e-1;}

}

};2.2圆弧的扫描转换算法;若d0,则取P1为下一象素,而且再下一象素的判别式为;为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。

使用e=d-0.25代替de0=1-R;算法过程;2.3多边形的扫描转换与区域填充;多边形分为凸多边形、凹多边形、含内环的多边形。;2.3.1多边形的扫描转换;一个多边形与若干扫描线;数据结构;新边表(NET):

存放在该扫描线第一次出现的边。若某边的较低端点为ymin;假定当前扫描线与多边形某一条边的交点的x坐标为x,则下一条扫描线与该边的交点不要重计算,只要加一个增量△x。;扫描线与多边形的顶点或边界相交时,必须正确的交点的取舍。只需检查顶点的两条边的另外两个端点的y值。按这两个y值中大于交点y值的个数是0,1,2来决定。;算法过程;把新边表NET[i]中的边结点用插入排序法插入AET表,使之按x坐标递增顺序排列;

遍历AET表,把配对交点区间(左闭右开上的象素(x,y),用drawpixel(x,y,color)改写象素颜色值;

遍历AET表,把ymax=i的结点从AET表中

文档评论(0)

132****3356 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档