计算机图形学第2章-图形基元的显示课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机图形学第2章-图形基元的显示课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 图形 显示 课件
- 资源描述:
-
1、第二章第二章 图形基元的显示图形基元的显示 扫描转换扫描转换 将图形描述转换成用将图形描述转换成用象素矩阵表示的过程象素矩阵表示的过程 图形基元(输出图形元素)图形图形基元(输出图形元素)图形系统能产生的最基本图形系统能产生的最基本图形 线段、圆、多边形线段、圆、多边形 第一节第一节 直线扫描转换算法直线扫描转换算法 第二节第二节 圆的扫描转换算法圆的扫描转换算法 第三节第三节 区域填充区域填充 第一节第一节 直线扫描转换算法直线扫描转换算法 DDADDA直线扫描转换算法直线扫描转换算法 中点画线法中点画线法 BresenhamBresenham画线算法画线算法 设待画线段两端点的坐标值设待画
2、线段两端点的坐标值(x1,y1)和和(x2,y2),假定,假定 x1fabs(dy)?fabs(dx):fabs(dy);dx/=e;dy/=e;x=x1;y=y1;for(int i=1;i0;直线下方的点,直线下方的点,F(x,y)0。将将M代入代入F(x,y)d=F(M)=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c当当 d 0,则取正右方的则取正右方的P1。当当d=0时,二者一样合适,取时,二者一样合适,取P1。对每一个象素计算判别式对每一个象素计算判别式d,根据,根据它的符号确定它的符号确定下一下一象素。象素。d0 时,取正右方象素时,取正右方象素P1,判断,
3、判断再再下一个下一个象素应取哪个,应计算象素应取哪个,应计算d1=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c =d+a故故d的增量为的增量为a。而若而若d0,则取右上方象素,则取右上方象素P2。要判。要判断再下一个象素,则要计算断再下一个象素,则要计算d2=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c=d+a+b 故在第二种情况故在第二种情况,d的增量为的增量为a+b 再看再看d的初始值。显然,第一个象的初始值。显然,第一个象素应取左端点素应取左端点(x0,y0),相应的判别式,相应的判别式值为值为 d0=F(x0+1,y0+0.5)=a(x0
4、+1)+b(y0+0.5)+c=ax0+by0+c+a+0.5b=F(x0,y0)+a+0.5b 由于由于(x0,y0)在直线上,在直线上,故故F(x0,y0)=0。因此因此,d的初始值为的初始值为d0=a+0.5b 考虑用考虑用2d来代替来代替d的计算的计算void MidpointLine(int x0,int y0,int x1,int y1)int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;SetPixel(x,y);while(xx1 )if(d0)x+;y+
5、;d+=delta2;else x+;d+=delta1;SetPixel(x,y);/*while*/*MidpointLine*/xyd001(-4)10-3(+6)213(-4)31-1(+6)425(-4)521(x=x1=5)(0,0)、(5,2)a=y0-y1=-2,b=x1-x0=5 d d0 0 =2=2*a a+b b=1=1 斜率斜率m在在0到到1之间,并且之间,并且 设在第设在第i步已经确定步已经确定第第i个象素点是个象素点是 ,它是直线上点它是直线上点 的最接近位置的最接近位置()现在看第现在看第i+1步如步如何确定第何确定第i+1个象个象素点的位置。素点的位置。1 1
6、2 2x xx x)y y,x x(i ii i)y y,(x(xi ii ii ii ix xx x d1d21 12 2b by y2 21 1)x x2 2m m(d dd di ii i2 21 1b b1 1)x xm m(1 1)y y(y y1 1)y y(d dy yb b1 1)x xm m(y yy yd di ii i2 2i ii ii i1 12 21 1d dd d,下一个象素点取下一个象素点取 1 1)y y1 1,x x(i ii i 2 21 1d dd d,下一个象素点取,下一个象素点取 )y y1 1,x x(i ii i 2 21 1d dd d,取两象
7、素点中的任意一个,取两象素点中的任意一个 cyxxypiii11122cyxxyddxpiii22)(21)(2211iiiiyyxypp0ip,应取11iyiyx)x)-2(y2(yi ip p1 1i ip p0ip,应取应取 iyiy1yipip21确定确定P P1 1,bxxyyyxx111,11令令i i=1=1,可计算求出,可计算求出:xy21pvoid BresenhamLine(int x1,int y1,int x2,int y2)int x,y,dx,dy,p;x=x1;y=y1;dx=x2-x1;dy=y2-y1;p=2*dy-dx;for(;x=0)y+;p+=2*(d
8、y-dx);elsep+=2*dy;第二节第二节 圆的扫描转换算法圆的扫描转换算法 x2+y2=R2 2 2x x2 2R Ry yR Rs si in ny yR Rc co os sx x中点画圆法中点画圆法 讨论如何从点讨论如何从点(0(0,R R)至至 (,)的的1 18 8圆周圆周 2/R2/Rx x坐标为坐标为x xi i的的象素象素(x xi i,y yi i)下一个象素只下一个象素只能是能是(x xi i+1,+1,y yi i)的的P P1 1点或点或 (x xi i+1,+1,y yi i-1)-1)的的P P2 2点点M构造函数:构造函数:F(x,y)=x2+y2-R2圆
9、上的点,圆上的点,F(x,y)=0圆外的点,圆外的点,F(x,y)0圆内的点,圆内的点,F(x,y)0 P1和和P2的中点为的中点为 M=(xi+1,yi-0.5)F(M)0时,时,M在圆外,取在圆外,取P2F(M)=0时,时,P1或或P2随取一个即可,随取一个即可,取取P2 构造判别式构造判别式222)5.0()1()5.0,1()(RyxyxFMFdiiii 若若d d00,取,取P P1 1作为作为下一个象素下一个象素,而,而且且再下一个象素再下一个象素的判别式为的判别式为 32)5.0()2()5.0,2(222iiiiixdRyxyxFd 而若而若d d00,应取,应取P P2 2作
10、为作为下一个象素下一个象素,而且而且再下一个象素再下一个象素的判别式的判别式 522)5.1()2()5.1,2(222iiiiiiyxdRyxyxFd 第一个象素是第一个象素是(0,(0,R R),判别式,判别式d d的初始值为的初始值为 d d0 0=F F(1,(1,R R-0.5)=1+(-0.5)=1+(R R-0.5)0.5)2 2-R R2 2=1.25-=1.25-R R。void MidpointCircle(int R)int x,y;double d;x=0;y=R;d=1.25-R;SetPixel(x,y);while(xy)if(d0)d+=2*x+3;x+;els
11、ed+=2*(x-y)+5;x+;y-;SetPixel(x,y);在上述算法中,使用了浮点数来表在上述算法中,使用了浮点数来表示判别式示判别式d。简化算法,在算法中全部使用整数,简化算法,在算法中全部使用整数,使用使用e=d-0.25代替代替d。显然,初始化运算显然,初始化运算d=1.25-R对应对应于于e=1-R。判别式判别式d0对应于对应于e-0.25。算法中可把算法中可把d直接换成直接换成e。又由于。又由于e的的初值为整数,且在运算过程中的增量也初值为整数,且在运算过程中的增量也是整数,故是整数,故e始终是整数,所以始终是整数,所以e-0.25等价于等价于e0。上述算法还可以进一步改进
12、。上述算法还可以进一步改进。以提高效率。注意到以提高效率。注意到d的增量是的增量是x、y的线性函数,每当的线性函数,每当x递增递增1,d递增递增x=2。每当。每当y递减递减1,d递增递增y=2。由于初始象素为。由于初始象素为(0,R),所以,所以x的初值为的初值为3,y的初值为的初值为-2R+5。void MidpointCircle2(int R)int x,y,deltax,deltay,d;x=0;y=R;d=1-R;deltax=3;deltay=5-R-R;SetPixel(x,y);while(xy)if(d0和和dD0若若pi0,即,即dH 0,必有,必有pi0,dD0,必有,必
13、有pi0。得出结论:得出结论:pi做判别量,做判别量,pi0选选H点为点为下一个象素点,当下一个象素点,当pi0 0时,选时,选D点为下点为下一个象素点。一个象素点。从从 计算计算ip1222222)1(2Riyiyixip64)1221(21ixiyiyiyiyipip 当当p pi i00时,应选时,应选D D点,即选点,即选11iyiy10)(41iiiiyxpp1ip 当当p pi i00时,应选时,应选H H,即选,即选 iyiy1641iiixpp 画圆的起始点是画圆的起始点是(0(0,R R),即即x x1 1=0=0,y y1 1=R R,代入前式,令,代入前式,令i i=1=
14、1,就得到:就得到:RP231void BresenhamCircle(int R)int x,y,p;x=0;y=R;p=3-2*R;for(;x=0)p+=4*(x-y)+10;y-;else p+=4*x+6;只需修改语句只需修改语句SetPixel(x,y),画八个对称的点,就可以画出全部圆画八个对称的点,就可以画出全部圆周。若加一个平移,就可以画出圆心周。若加一个平移,就可以画出圆心在任意位置的圆周。在任意位置的圆周。区域填充区域填充 种子填充算法种子填充算法 区域是指光栅网格上的一组象素。区域是指光栅网格上的一组象素。区域填充是把某确定的象素值送入区域填充是把某确定的象素值送入 到
15、区域内部的所有象素中。到区域内部的所有象素中。区域填充方法分为两大类。区域填充方法分为两大类。区域由区域由多边形多边形围成,区域由多边形围成,区域由多边形的顶点序列来定义的顶点序列来定义;另一类方法是通另一类方法是通过过象素的值象素的值来定义区域的内部,相应来定义区域的内部,相应的技术称为是以象素为基础的的技术称为是以象素为基础的.内定义区域内定义区域,定义方法是指出区域内,定义方法是指出区域内部所具有的象素值部所具有的象素值,此时区域内部所有象此时区域内部所有象素有某个原值素有某个原值oldvalue;边界定义区域边界定义区域,定义方法是指出区域,定义方法是指出区域边界所具有的象素值。此时区
展开阅读全文