第一章复习重点:计算机图形学的概念:计算机图形学:是研究怎样用计算机表示、生成、处理和显示图形的一门学科。几个图形学中的基本概念:计算机图形:用计算机生成、处理和显示的对象;由几何数据和几何模型,利用计算机进行显示并存储,并可以进行修改、完善后形成的;图象处理:将客观世界中原来存在的物体影象处理成新的数字化图象的相关技术;如CT扫描、X射线探伤等;模式识别:对所输入的图象进行分析和识别,找出其中蕴涵的内在联系或抽象模型;如邮政分检设备、地形地貌识别等;计算几何:研究几何模型和数据处理的学科,讨论几何形体的计算机表示、分析和综合,研究如何方便灵活、有效地建立几何形体的数学模型以及在计算机中更好地存贮和管理这些模型数据;图像(数字图像):点阵表示,枚举出图形中所有的点(强调图形由点构成)简称为参数表示图形:由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)+属性参数(颜色、线型等)来表示图形图形:计算机图形学的研究对象,主要分为两类:基于线条信息表示。明暗图(Shading)能在人的视觉系统中产生视觉印象的客观对象。包括自然景物、拍摄到的图片、用数学方法描述的图形等等构成图形的要素几何要素:刻画对象的轮廓、形状等非几何要素:刻画对象的颜色、材质等常用的图形输入设备分为两种:矢量型图形输入设备与光栅型的区别:矢量型输入设备采用跟踪轨迹、记录坐标点的方法输入图形。主要输入数据形式为直线活折线组成的图形数据。光栅扫描型图形输入设备采用逐行扫描、按一定密度采样的方式输入图形,主要输入的数据为一幅由亮度值构成的像素矩阵——图像。常用的图形输出设备分为两类:向量型向量型设备的作画机构随着图形的输出形状而移动并成像光栅扫描型光栅扫描型设备的作画机构按光栅矩阵方式扫描整张图面,并按输出内容对图形成像。显示器原理:1.随即扫描显示器:应用程序发出绘图命令,→解析成显示处理器可接受命令格式,存放在刷新存储器中。刷新存储器中所有的绘图命令组成一个显示文件,由显示控制器负责解释执行(刷新),→驱动电子枪在屏幕上绘图。特点:电子束可随意移动,只扫描荧屏上要显示的部分。修改图形,实际是修改显示文件中的某些绘图命令。(电子束的定位和偏转具有随即性)2.彩色阴极射线管通过把发出不同颜色的荧光物质进行组合而实现的。通常用射线穿透法和影孔板法实现彩色显示。应用:主要用于画线显示器优点:成本低缺点:只能产生有限几种颜色。3.存储管式图形显示器发展了利用管子本身来储存信息的技术。4.光栅扫描式图形显示器(随机扫描显示器工作原理:从显示文件存储器中去处画线指令或显示字符指令、方式指令(如高度、线性等),送到显示控制器,由显示控制器控制电子束的偏转,轰击荧光屏上的荧光材料,从而产生一条发亮的图形轨迹。特点:随机扫描显示器中电子束的定位和偏转具有随机性,在某一时刻,显示屏上只有一个光点发光,因而可以画出很细的图形。光栅扫描显示器工作原理:在这种显示器中,电子束的运动轨迹是固定的。即从左到右、自上而下扫描荧光屏,来产生一幅光栅。特点:由于图形是以点阵的形式存储在帧缓冲器中。所以光栅扫描显示器的电子束按从上到下、从左到右的顺序依次扫描屏幕,来建立图形。缺点:动态不如随机扫描器好。优点:可读性强,可控制亮度与颜色)第二章复习重点假设直线的起点坐标为P1(x1,y1),终点坐标为P2(x2,y2),x方向的增量为△x=x2-x1;y方向上增量为△y=y2-y1直线的斜率为k=△y/△x当△x>△y时,让x从x1到x2变化,每步递增1,那么,x的变化可以表示为x(i+1)=xi+1y的变化可以表示为y(i+1)=yi+k综合考虑,按照从(x1,y1)到(x2,y2)方向不同,分8个象限(图2.1)。对于方向在第1a象限内的直线而言,取增量值Dx=1,Dy=m。对于方向在第1b象限内的直线而言,取增量值Dy=1,Dx=1/m。算法描述如下:dda_line(xa,ya,xb,yb,c)intxa,ya,xb,yb,c;{//使用DDA算法,每生成一条直线做两次除法,画线中每一点做两次加法。floatdelta_x,delta_y,x,y;intdx,dy,steps,k;if(abs(dx)abs(dy))steps=abs(dx);elsesteps=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;k=steps;k++){x+=delta_x;y+=delta_y;set_pixel((int)(x+0.5),(int)(y+0.5),c);}}直线Bresenham算法根据上面的推导,圆周生成算法思想如下:⒈求误差初值,,i=1,画点(0,r);⒉求下一个光栅位置,其中xi+1=xi+1,如果pi0则yi+1=yi,否则;⒊画点(xi+1,yi+1);⒋计算下一个误差,如果pi0则pi+1=pi+4xi+6,否则;⒌i=i+1,如果x=y则结束,否则返回步骤2。VoidLineBre(PDC*pDC,intx0,inty0,intxend,intyend){intdx=xend-x0;intdy=yend-y0;intp=2*dy-dx;intx,y;x=x0;y=y0;pDC-SetPixel(x,y,c);while(xxend){x++;if(p0){p=p+2*dy;}else{p=p+2*dy-2*dx;y++;}pDC-SetPixel(x,y,c);}}根据上面的推导,圆周生成算法思想如下:⒈求误差初值,,i=1,画点(0,r);⒉求下一个光栅位置,其中xi+1=xi+1,如果pi0则yi+1=yi,否则;⒊画点(xi+1,yi+1);⒋计算下一个误差,如果pi0则pi+1=pi+4xi+6,否则10;⒌i=i+1,如果x=y则结束,否则返回步骤2。circle(xc,yc,radius,c)intxc,yc,radius,c;{intx,y,p;x=0;y=radius;;while(xy){plot_circle_points(xc,yc,x,y,c);if(p0)p=p+4*x+6;else{p=p+4*(x}x+=1;}if(x==y)plot_circle_points(xc,yc,x,y,c);}plot_circle_points(xc,yc,x,y,c)intxc,yc,x,y,c;{set_pixel(xc+x,yc+y,c);c);set_pixel(xc+y,yc+x,c);}在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。填色算法分为两大类:⒈扫描线填色(Scan-LineFilling)算法。这类算法建立在多边形边界的矢量形式数据之上,可用于程序填色,也可用于交互填色。⒉种子填色(SeedFilling)算法。这类算法建立在多边形边界的图像形式数据之上,并还需提供多边形边界内一点的坐标。所以,它一般只能用于人机交互填色,而难以用于程序填色。扫描线填色(Scan-LineFilling)算法算法的基本思想。多边形以n、x_array、y_array的形式给出,其中,x_array、y_array中存放着多边形的n个顶点的x,y坐标。用水平扫描线从上到下扫描由点线段构成的多段定义成的多边形。每根扫描线与多边形各边产生一系列交点。这些交点按照x坐标进行分类,将分类后的交点成对取出,作为两个端点,以所需要填的色彩画水平直线。多边形被扫描完毕后,填色也就完成。活性边表(ActiveListofSide)的采用将多边形的边分成两个子集:与当前扫描线相交的边的集合,以及与当前扫描线不相交的边的集合。对后者不必进行求交运算,这样就提高了算法的效率。步骤一、求交点,即计算该扫描线与多边形各边的交点。步骤二、排序,由于交点不一定由左到右求出,因此将求出的交点按x坐标值排序。步骤三、交点配对,1与2,3与4,……,每对表示一个区间。步骤四:区间填充。上述基本思想中,有几个问题需要解决或改进:⒈左、右顶点处理。⒉水平边处理。⒊扫描线与边的求交点方法采用递归算法。⒋减少求交计算量,采用活性边表。种子填色算法(算法要求区域是连通的连通性4连通、8连通4连通:)1.初始化:种子像素入栈,当栈非空时,重复2~4的步骤2.栈顶像素出栈3.将出栈像素置为多边形颜色4.按左、上、右、下顺序依次检查与出栈像素相邻的四个像素,若其中某个像素不在边界上且未置成多边形色,则该像素入栈5.当堆栈为空时,算法终止扫描线填色与种子填色方法比较联系:都是光栅图形面着色,用于真实感图形显示。可相互转换。扫描线填色转化为种子填色问题:当给定多边形内一点为种子点,并用Bresenham或DDA算法将多边形的边界表示成八连通区域后,则扫描线填色转化为种子填色。种子填色转化为扫描线填色;若已知给定多边形的顶点,则种子填色转化为扫描线填色。不同点:1.基本思想不同;前者是顶点表示转换成点阵表示,后者只改变区域内填充颜色,没有改变表示方法。2.对边界的要求不同前者只要求扫描线与多边形边界交点个数为偶数。后者:区域封闭,防止递归填充跨界。3.基本的条件不同前者:从边界顶点信息出发。后者:区域内种子点。字符的表示形式:汉字编码的国家标准字符集。每个符号由一个区码和一个位码(2字节)共同标识。计算机中字符由一个数字编码唯一标识。ASCII码。它是用7位二进制数进行编码表示128个字符.用一个字节表示。区分ASCII码与汉字编码,采用字节的最高位来标识点阵字符:每个字符由一个位图表示矢量字符:记录字符的笔画信息特点:点阵字符:存储量大,易于显示矢量字符:存储量小,美观,变换方便需要光栅化后才能显示。求交问题:求交问题可以分为两类:求交点,求交线常用的3种算法,即叉积判断法、夹角之和检验法以及交点计数检验法。⑴叉积判断法假设判断点为P0,多边形顶点按顺序排列为P1,P2,…,Pn,如图2.16所示。令,其中,i=1,2,…,n,Vn+1=V1。那么,P0在多边形内的充要条件是叉积的符号相同。叉积判断法仅适用于凸多边形。当多边形为凹多边形时,可采用后面介绍的两种方法。⑵夹角之和检验法假设某平面上有点P0和多边形P1P2P3P4P5,如图2.17所示。将点P0分别与Pi相连,构成向量,假设。如果,则点P0在多边形之外,如图2.17(a)所示。如果,则点P0在多边形之内,如图2.17(b)所示。可通过公式计算.令,Ci=Vi·Vi+1,则。所以,且的符号即代表角度的方向。在多边形边数不超过43的情况下,可以采用下列近似公式计算:≤其中,常数d=0.0355573。当≥π时,可判定P0在多边形内。当<π时,可判定P0在多边形外。⑶交点计数检验法当多边形是凹多边形,甚至还带孔时,可采用交点计数法判断点是否在多边形内。具体做法是,从判断点作一射线至无穷远,求射线与多边形边的交点个数。若交点个数为奇数,则点在多边形内;否则,点在多边形外。当射线穿过多边形顶点时,必须特殊对待。若共享顶点的两边在射线的同一侧,则交点计数加2,否则加1。按这种方法,交点计数为偶数时点在多边形外;交点计数为奇数时点在多边形内。凸包算法求多边形或多面体的包围盒是相当简便的。只要遍历其所有顶点,就求出包围盒。对于一般的几何形体,则要根据其具体性质来求。对含有曲线、曲面的几何体进行求交时,常常先求它们的一个凸多边形或凸多面体的凸包。由于凸多边形和凸多面体间的求交相对简单,因此可以节省一定的计算量。例如,Bezier曲线、B样条和NURBS曲线、曲面具有凸包性质,其控制多边形或控制网格是其本身的凸包一般的凸包的求法因具体情况而异,下面举一个求圆弧凸包的例子。设圆弧段的圆方程为,圆弧起始角为,终止角为。对圆弧计算凸包如图2.19所示。先根据起始角与终止角求出相应的弧端点P1、P2坐标,进而求出弧的弦中点Pm=(P1+P2)/2。设圆弧段的