计算机图形学02.ppt
《计算机图形学02.ppt》由会员分享,可在线阅读,更多相关《计算机图形学02.ppt(150页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机图形学计算机图形学Computer GraphicsComputer Graphics使用班级:地信2009级 王增武 WangZTel:13518208752QQ:64434430第一章第一章 绪论绪论第二章第二章 光栅图形学光栅图形学第三章第三章 曲线和曲面曲线和曲面第四章第四章 图形变换图形变换第五章第五章 造型技术造型技术第六章第六章 真实感图形显示真实感图形显示上机实验上机实验第二章第二章 基本图形生成算法基本图形生成算法2.1 2.1 直线的生成算法直线的生成算法2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法2.3 2.3 区域填充算法区域填充算法2.4 2.4 线
2、宽与线型处理线宽与线型处理2.5 2.5 字符的生成字符的生成2.6 2.6 图形裁剪图形裁剪2.7 2.7 反走样技术反走样技术第二章第二章 基本图形生成算法基本图形生成算法2.1 2.1 直线的生成算法直线的生成算法2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法2.3 2.3 区域填充算法区域填充算法2.4 2.4 线宽与线型处理线宽与线型处理2.5 2.5 字符的生成字符的生成2.6 2.6 图形裁剪图形裁剪2.7 2.7 反走样技术反走样技术2.1 2.1 直线的生成算法直线的生成算法画一条从画一条从(x x1 1,y y1 1)到到(x x2 2,y y2 2)的直线,实质
3、上是一个发的直线,实质上是一个发现最佳逼近直线的像素序列,并填入色彩数据的过程。这现最佳逼近直线的像素序列,并填入色彩数据的过程。这过程也称为过程也称为直线光栅化直线光栅化。连续性连续性粗细、亮度要粗细、亮度要均匀均匀像素逼近待画像素逼近待画直线直线速度速度2.1 2.1 直线的生成算法直线的生成算法1直线直线DDA算法算法(Digital Differential Analyser)假设假设 直线的起点坐标为直线的起点坐标为P P1 1(x(x1 1,y,y1 1),终点坐标为,终点坐标为P P2 2(x(x2 2,y,y2 2)x x方向的增量为方向的增量为 x xx x2 2x x1 1
4、 ;y y方向上增量为方向上增量为 y yy y2 2y y1 1 直线的斜率为直线的斜率为 m my yx x 当当 x xy y 时,让时,让 x x 从从 x x1 1 到到 x x2 2 变化,每步递增变化,每步递增 1 1,那么,那么,x x 的变化可以表示为的变化可以表示为 x xi+1i+1x xi i1 1 y y 的变化可以表示为的变化可以表示为 y yi+1i+1y yi im m 用上式可求得图中直线用上式可求得图中直线 P P1 1P P2 2 和和 y y 向网格线的交点,但显示时要用舍入向网格线的交点,但显示时要用舍入 找到最靠近交点处的象素点耒表示。找到最靠近交点
5、处的象素点耒表示。当当 xy xdy?DxDy1a true 1 m1b false 1/m 12a true -1 m2b false -1/m 13a true -1 -m3b false -1/m -14a true 1 -m4b false 1/m -1表1 8个象限中的坐标增量值2.1 2.1 直线的生成算法直线的生成算法研究表中的数据,可以发现研究表中的数据,可以发现两个规律两个规律。当当 d dx x d dy y时时 D Dx x =1=1,D Dy y=m m否则否则 D Dx x =1/=1/m m,D Dy y=1=1 D Dx x、D Dy y的符号与的符号与d dx
6、x、d dy y的符号相同。的符号相同。2.1 2.1 直线的生成算法直线的生成算法算法描述如下:dda_line(xa,ya,xb,yb,c)int xa,ya,xb,yb,c;float delta_x,delta_y,x,y;int dx,dy,steps,k;dx=xbxa;dy=ybya;if(abs(dx)abs(dy)steps=abs(dx);else steps=abs(dy);delta_x=(float)dx/(float)steps;delta_y=(float)dy/(float)steps;x=xa;y=ya;set_pixel(x,y,c);for(k=1;k00
7、,则,则y yi i+1+1=y yi i+1+1,否则,否则y yi i+1+1=y yi i。将式将式(2.1)(2.1)、(2.2)(2.2)、(2.3)(2.3)代入代入d d1 1 d d2 2,再用,再用d dx x乘等式两边,并以乘等式两边,并以P Pi i=(=(d d1 1 d d2 2)d dx x代入上述等式,得代入上述等式,得 P Pi i=2=2x xi id dy y 2 2y yi id dx x+2d+2dy y+(2+(2b b 1)1)d dx x (2.4)(2.4)d d1 1 d d2 2是用以判断符号的误差。由于在是用以判断符号的误差。由于在1 1a
8、 a象限,象限,d dx x总大于总大于0 0,所,所以以P Pi i仍旧可以用作判断符号的误差。仍旧可以用作判断符号的误差。P Pi i+1+1为为 P Pi i+1+1=P Pi i+2d+2dy y 2(2(y yi i+1+1 y yi i)d dx x (2.5)2.5)2.1 2.1 直线的生成算法直线的生成算法求误差的初值求误差的初值P P1 1,可将,可将x x1 1、y y1 1和和m m、b b代入式代入式(2.4)(2.4)中的中的x xi i、y yi i而得到而得到 P Pi i=2=2x xi id dy y 2 2y yi id dx x+2d+2dy y+(2+
9、(2b b 1)1)d dx x (2.4)(2.4)P P1 1=2d=2dy y d dx x2.1 2.1 直线的生成算法直线的生成算法 综述上面的推导,第综述上面的推导,第1 1a a象限内的直线象限内的直线BresenhamBresenham算法思想如下:算法思想如下:画点画点(x x1 1,y y1 1),d dx x=x x2 2 x x1 1,d dy y=y y2 2 y y1 1,计算误差初值,计算误差初值P P1 1=2d=2dy y d dx x,i i=1=1;求直线的下一点位置求直线的下一点位置 x xi i+1+1=x xi i+1+1 如果如果P Pi i00,
10、则,则y yi i+1+1=y yi i+1+1,否则,否则y yi i+1+1=y yi i;画点画点(x xi i+1+1,y yi i+1+1);求下一个误差求下一个误差P Pi i+1+1,如果,如果P Pi i00,则,则P Pi i+1+1=P Pi i+2d+2dy y 2d2dx x,否则,否则 P Pi i+1+1=P Pi i+2d+2dy y;i i=i i+1+1;如果;如果i id|dydy|为分支,并分别将为分支,并分别将2 2a a、3 3a a象限的直线和象限的直线和3 3b b、4 4b b象限的直线变换到象限的直线变换到1 1a a、4 4a a和和2 2b
11、 b、1 1b b象限方向去,以实现程序处理的简洁。象限方向去,以实现程序处理的简洁。2.1 2.1 直线的生成算法直线的生成算法3 中点画线法中点画线法假定直线斜率假定直线斜率0K P2离直线更近更近离直线更近更近-取取P2。uM在在Q的上方的上方-P1离直线更近更近离直线更近更近-取取P1uM与与Q重合,重合,P1、P2任取一点。任取一点。问题:如何判断问题:如何判断M与与Q点的关系?点的关系?(M为为P1P2的中点的中点)M2.1 2.1 直线的生成算法直线的生成算法假设直线方程为:ax+by+c=0 (x0,y0)(x1,y1)其中a=y0-y1,b=x1-x0,c=x0y1-x1y0
12、由常识知:欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。2.1 2.1 直线的生成算法直线的生成算法构造判别式:d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+cu当d0,M在直线(Q点)上方,取右方P1;u当d=0,选P1或P2均可,约定取P1;2.1 2.1 直线的生成算法直线的生成算法d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c能否采用增量算法呢?能否采用增量算法呢?2.1 2.1 直线的生成算法直线的生成算法若若d 0-M在直线上方在直线上方-取取P1;此时再下一个象素的判别式为此时
13、再下一个象素的判别式为 d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)+c =a(xp+1)+b(yp+0.5)+c+a=d+a;增量为增量为a2.1 2.1 直线的生成算法直线的生成算法若若dM在直线下方在直线下方-取取P2;此时再下一个象素的判别式为此时再下一个象素的判别式为 d2=F(xp+2,yp+1.5)=a(xp+2)+b(yp+1.5)+c =a(xp+1)+b(yp+0.5)+c+a+b=d+a+b;增量为增量为ab2.1 2.1 直线的生成算法直线的生成算法画线从画线从(x0,y0)开始,开始,d的初值的初值d0=F(x0+1,y0+0.5)=a(x0
14、+1)+b(y0+0.5)+c =F(x0,y0)+a+0.5b=a+0.5b 由于只用由于只用d 的符号作判断,为了只包含整数运算的符号作判断,为了只包含整数运算,可以用可以用2d代替代替d来摆脱小数,提高效率。来摆脱小数,提高效率。2.1 2.1 直线的生成算法直线的生成算法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)
15、if(d0)x+;y+;d+=d2;else x+;d+=d1;drawpixel(x,y,color);/*while*/*mid PointLine*/2.1 2.1 直线的生成算法直线的生成算法例:用中点画线法例:用中点画线法P0(0,0)P1(5,2)a=y0-y1=-2 b=x1-x0=5d0=2a+b=1 d1=2a=-4d2=2(a+b)=6ixiyid1 0012 10-33 2134 31-15 425第二章第二章 基本图形生成算法基本图形生成算法2.1 2.1 直线的生成算法直线的生成算法2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法2.3 2.3 区域填充算法区
16、域填充算法2.4 2.4 线宽与线型处理线宽与线型处理2.5 2.5 字符的生成字符的生成2.6 2.6 图形裁剪图形裁剪2.7 2.7 反走样技术反走样技术2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法基础知识基础知识给出圆心坐标给出圆心坐标(x xc c,y yc c)和半径和半径r r,假设圆的方程为:假设圆的方程为:X2+Y2=r2逐点画出一个圆周的公式有下列两种:逐点画出一个圆周的公式有下列两种:直角坐标法直角坐标法(x x x xc c)2 2+(+(y y y yc c)2 2=r r2 2由上式导出:由上式导出:当xxc从r到r作加1递增时,就可以求出对应的圆周点的y
17、坐标。但是这样求出的圆周上的点是不均匀的,xxc越大,对应生成圆周点之间的圆周距离也就越长。因此,所生成的圆不美观。2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法 极坐标法极坐标法x x=x xc c+r r coscos,y y=y yc c+r r sinsin 当当从从0 0到到作递增时,由此式便可作递增时,由此式便可求出圆周上均匀分布的求出圆周上均匀分布的360360个点的个点的(x x,y y)坐标。坐标。圆的特征圆的特征:八对称性。八对称性。只要扫描转换八分之一圆弧,只要扫描转换八分之一圆弧,就可以求出整个圆弧的象素集就可以求出整个圆弧的象素集.将圆周分为将圆周分为8 8
18、个象限个象限(右右图图),只要将第,只要将第1 1a a象象限中的圆周光栅点求出,其余限中的圆周光栅点求出,其余7 7部分圆周就可以通过对称法则部分圆周就可以通过对称法则计算出来。计算出来。2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法3 3 主要算法主要算法角度角度DDA法法中点画圆法中点画圆法Bresenham画圆算法画圆算法生成圆弧的正负法生成圆弧的正负法生成圆弧的多边形逼近法生成圆弧的多边形逼近法(圆的内接正多边形迫近法、圆的等面积正多边形迫近法)(圆的内接正多边形迫近法、圆的等面积正多边形迫近法)2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法1中点画圆法中点画圆法
19、构造函数:构造函数:F(X,Y)=X2 +Y2-R2;则;则 F(X,Y)=0 (X,Y)在圆上;)在圆上;F(X,Y)0 (X,Y)在圆外。)在圆外。设设M为为P1、P2间的中点,间的中点,M=(Xp+1,Yp-0.5)MP1P22.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法有如下结论:有如下结论:F(M)M在圆内在圆内-取取P1 F(M)=0-M在圆外在圆外-取取P2为此,可采用如下判别式:为此,可采用如下判别式:MP1P22.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法考虑中心在原点,半径为R的第二个8分圆,构造判别式(圆方程)2.2 2.2 圆(椭圆)的生成算法圆(椭
20、圆)的生成算法若 d=0,则应取P2为下一象素,而且下一象素的判别式为 第 一个象素是(0,R),判别式d的初始值为2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法为了进一步提高算法的效率,可以将上面的算法中为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。用整数实现中点画圆法。使用使用e=d-0.25代替代替d e0=1-R2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法MidPointCircle(int r int color)int x,y;float d;x
21、=0;y=r;d=1.25-r;circlepoints(x,y,color);/显示圆弧上的八个对称点显示圆弧上的八个对称点 while(x=y)if(d0)d+=2*x+3;else d+=2*(x-y)+5;y-;x+;circlepoints(x,y,color);2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法2圆的圆的Bresenham算法算法设圆的半径为设圆的半径为r r。先考虑圆心在。先考虑圆心在(0,0)(0,0),并从,并从x x=0=0、y y=r r开始的顺时针方向的开始的顺时针方向的1/81/8圆周的生成过程。在这种情况下,圆周的生成过程。在这种情况下,x x
22、每步增加每步增加1 1,从,从x x=0=0开始,到开始,到x x=y y结束。即有结束。即有x xi i+1+1=x xi i+1+1相应的相应的y yi i+1+1则在两种可能中选择:则在两种可能中选择:y yi i+1+1=y yi i或者或者y yi i+1+1=y yi i 1 1选择的原则是考察精确值选择的原则是考察精确值y y是靠近是靠近y yi i还是还是靠近靠近y yi i 1(1(右右图图),计算式为计算式为y y2 2=r r2 2(x xi i+1)+1)2 2d d1 1=y yi i2 2 y y2 2=y yi i2 2 r r2 2+(+(x xi i+1)+1
23、)2 2d d2 2=y y2 2(y yi i 1)1)2 2=r r2 2(x xi i+1)+1)2 2(y yi i 1)1)2 2 y的位置2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法令令p pi i=d d1 1 d d2 2,并代入,并代入d d1 1、d d2 2,则有,则有 p pi i=2(=2(x xi i+1)+1)2 2+y yi i2 2+(+(y yi i 1)1)2 2 2 2r r2 2 (2.6)(2.6)p pi i称为误差。如果称为误差。如果p pi i00则则y yi i+1+1=y yi i,否则,否则y yi i+1+1=y yi i
24、1 1。p pi i的递归式为的递归式为 p pi i+1+1=p pi i+4+4x xi i +6+2(+6+2(y yi+1i+12 2 y yi i2 2)2(2(y yi+1i+1 y yi i)(2.7)(2.7)p pi i的初值由式的初值由式(2.6)(2.6)代入代入x xi i=0=0,y yi i=r r而得而得 p p1 1=3=3 2 2r r (2.8)(2.8)2.2 2.2 圆(椭圆)的生成算法圆(椭圆)的生成算法圆周生成算法思想如下:圆周生成算法思想如下:求误差初值,求误差初值,p p1 1=3=3 2 2r r,i i=1=1,画点,画点(0,(0,r r)
25、;求下一个光栅位置,其中求下一个光栅位置,其中x xi i+1+1=x xi i+1+1,如果,如果p pi i00则则y yi i+1+1=y yi i,否则否则y yi i+1+1=y yi i 1 1;画点画点(x xi i+1+1,y yi i+1+1);计算下一个误差,如果计算下一个误差,如果p pi i00则则p pi i+1+1=p pi i+4+4x xi i+6+6,否则,否则p pi i+1+1=p pi i+4(+4(x xi i y yi i)+10)+10;i i=i i+1+1,如果,如果x x=y y则结束,否则返回步骤则结束,否则返回步骤2 2。2.2 2.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 02
限制150内