




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学,第一章、绪论 第二章、基本图形生成原理 第三章、图形几何变换 第四章、多边形及多边形填充算法 第五章、图案及动画程序设计 第六章、裁剪算法 第七章、自由曲线,1,高等课堂,第一章、绪论,1.1 、概述 1.2 、计算机图形学的发展 1.3 、计算机图形学的应用 1.4 、计算机图形系统 1.5 、计算机图形标准,2,高等课堂,1.1 概述,1.1.1 计算机图形学的概念 计算机图形学Computer Graphics 是一门新兴学科,国际标准化组织ISO定义为: 计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理
2、论,应用数学及计算机科学基础上的一门边缘学科,3,高等课堂,1.1.2计算机图形学的研究内容,1.基于图形设备的基本图形元素的生成算法。 2.图形元素的几何变换。 3.自由曲线和曲线的插值、拟合、拼接、分解、过渡、光顺、整体和局部修改等。 4.三维几何造型技术。 5.三维形体的实时显示。 6.真实感图形的生成算法。 7.山、水、花、草、烟云等模糊景物的模拟生成和虚拟现实环境的生成。 8.科学计算可视化和三维或高维数据场的可视化,4,高等课堂,1.1.3 计算机图形学与图象处理的关系,计算机图形学的基本含义是使用计算机通过算法和程序在显示设备上构造出图形来。也就是说,图形是人们通过计算机设计和构
3、造出来的,不是通过摄象机和扫描仪等设备输入的图象。所设计和构造的图形可以是现实世界已经存在的物体的图形,也可以显示完全虚构的物体。因此,计算机图形学是真实的物体或虚构物体图形的综合技术,5,高等课堂,与此相反,图象处理是景物或图象的分析技术,它所研究的是计算机图形学的逆过程,图象增加、模式识别、景物分析、计算机视觉等,并研究如何从图象中提取二维或三维物体的模型,6,高等课堂,尽管计算机图形学和图象处理所涉及的都是用计算机来处理图形和图象,但是长期以来却属于不同的两个技术领域。近年来,由于多媒体技术、计算机动画、三维空间数据场显示及纹理映射等的迅速发展,计算机图形学和图象处理的结合日益紧密,并相
4、互渗透,7,高等课堂,1.2 计算机图形学的发展,1.2.1 计算机图形学的发展简史 年代准备阶段 年代发展阶段 年代推广应用阶段 年代系统实用化阶段 年代标准化智能化阶段,8,高等课堂,1.2.2 计算机图形学的发展方向 造型技术的发展 真实图形生成技术的发展 人机交互技术的发展 模拟艺术的仿真 计算机动画,9,高等课堂,1.3 计算机图形学的应用,1.用户接口 2.计算机辅助设计与制造(CAD/CAM) 3.地形地貌和自然资源图 4.计算机动画和艺术 5.科学计算可视化 6.游戏,10,高等课堂,1.4 计算机图形系统,计算机图形系统硬件 计算机图形系统软件 计算机图形显示原理 光栅扫描式
5、图形显示器,11,高等课堂,1.5 计算机图形标准,GKS PHIGS CGM CGI,12,高等课堂,第二章、基本图形生成原理,2.1 直线的生成 2.2 圆与椭圆的生成,13,高等课堂,2.1 直线的生成,2.1.1 数值微分法(DDA法) 2.1.2 中点画线法 2.1.3 Bresenham画线算法 2.1.4 Turboc 2.0 图形函数介绍,14,高等课堂,2.1.1数值微分法: 直线方程 y=kx+b 给出线段的两个端点 (x1,y 1)和 (x2,y2)可以算出k和b k=y/x=(y2-y1)/(x2-x1) b=y1-kx1 再用setpixel(x,int (y0.5)
6、,color)输出该系统的颜色值便可画出直线.但是画线效率太低,这是因为每步都需浮点乘法运算和一个四舍五入,15,高等课堂,数值微分算法的描述 对任何沿直线给定的x的增量x,可以从下中计算出y的增量 y=kx 同样可以得出对应于指定的 x= y/k 当对于斜率的绝对值|k|1的线段怎么实现呢,算法演示,16,高等课堂,2.1.2中点画线法,那么,下一个与直线最近的像素只能是正右方的p1( , )或右上方 p2( , )用空心小圆表示。再以M表示P1与p2的中点,即M=( , )。又设Q是理想直线与垂线 交点。显然,若M在Q的下方,则p2离直线近,应取为下一个像素;否则应取p1。这就是中点画线法
7、的基本原理,为了讨论方便,这里假定直线斜率在0-1之间,其它两种情况可参照下述讨论进行相应处理。 如图所示,若直线在x方向增加一个单位,则在y方向的增量只能在0-1之间。假设直线上当前已确定的一个像素点坐标为(xp,yp),用实心小圆表示,G,17,高等课堂,算法推导: 下面我们来讨论中点画线算法的实现。假设直线的起点和终点分别为(x1,y1)和(x2,y2)则直线方程为 F(x,y)=ax+by+c=0,18,高等课堂,其中,a=y1-y2, b=x2-x1, c=x1y2-x2y1。对于直线上的点F(x,y)=0;对于直线上方的点F(x,y)0;对于直线下方的点F(x,y)0。因此,欲判前
8、述Q在M的上方还是下方,只要把M代入F(x,y),并判断它的符号。构造判别式 d=F(M)=F( , )=a( )+b( )+c,19,高等课堂,当d0,则应取正右方的p1。 当d=0是,二者一样合适,可以随便取一个,20,高等课堂,我们约定取正右方的p1。 对每一个象素计算判别式d,根据它的符号确定下一象素。由于d是xp和yp的线性函数,可采用增量计算,以便提高运算效率,21,高等课堂,在d0的情况下,取正右方的象素p1,欲判断再下一个象素应取哪个,应计算 d1=F( +2, +0.5) =a( +2)+b( +0.5)+c =(a( +1)+b( +0.5)+c)+a =d+a 故d的增量
9、为a,22,高等课堂,而若d0,则取右上方象素p2。要判断再下一个象素,则要计算d2=F( +2, +1.5) =a( +2)+b( +1.5)+c =(a( +1)+b( +0.5)+c)+a+b =d+a+b故在第二种情况,d的增量为ab,23,高等课堂,再看d的初始值。显然,第一个象素应取左端点(x1,y1),相应的判别式值为d0=F( +1, +0.5) =a( +1)+b( +0.5)+c =(ax1+by1+c)+a+0.5b =F(x1,y1)+a+0.5b 但由于(x1,y1)在直线上,故F(x1,y1)=0。因此d的初始值为d0=a+0.5b,24,高等课堂,由于我们使用的只
10、是d的符号,而且d的增量都是整数,只是其初始值包含小数。因此,我们可以用2d代替d,来摆脱小数,写出仅包含整数运算的算法,25,高等课堂,void MidpointLine(x1,y1,x2,y2,color)int x1,y1,x2,y2,color; int a,b,d1,d2,dx,y; a=y1-y2; b=x2-x1; d=2*a+b; d1=2*a; d2=2*(a+b); x=x1; y=y1,setpixel(x,y,color);while(xx2)If(d0)x+;y+d+=d2;elsex+;d+=d1;setpixel(x,y,color,26,高等课堂,2.1.3 B
11、resenham画线算法,算法分析,27,高等课堂,算法推导,28,高等课堂,可视化效果图,29,高等课堂,2.1.4 图形环境的设置,include”graphics.h” 图形方式初始化函数: initgraph(*gdriver,*gmode,*path); gdriver:是一个空型指针,用来指定要装入的图形驱动程序,该值在头文件中定义; gmode:是一个空型指针,用来指定显示模式 path:图形驱动程序所在的路径,30,高等课堂,若用VGA图形驱动程序,图形显示模式为VGAHI, 则调用方式如下: int gdriver,gmode; gdriver=VGA gmode=VGAHI
12、 initgraph( 关闭图形方式函数为 closegraph(,31,高等课堂,直线类绘图函数 line(x1,y1,x2,y2); lineto(x,y); moveto(x,y); line(dx,dy); 几个直线段组成的图形,图一,图二,32,高等课堂,2.2 圆与椭圆的生成,由于圆是图形和图像中经常使用的元素,因此在大多数图形软件中都包含有生成圆和圆弧的过程。也会提供一个既能显示圆曲线,又能显示椭圆曲线的绘图函数。 2.2.1圆的特性 圆被定义为所有离一中心位置(xc ,yc)距离为给定值r的点集,可用如下方程式表示: (x-xc)2+(y-yc)2=r2,33,高等课堂,利用这
13、个方程,我们可以沿x轴从xc-r到xc+r以单位步长计算对应的y值来得到圆周上每点的位置: y=yc (r2-(xc-x)2) 但这并非是生成圆的最好方法。这个方法的第一个问题是每一步包含很大的计算量,34,高等课堂,第二个问题是所画像素位置间的间距是不一样的,在靠近x轴的0o180o处像素点之间的间距越来越大。 当然可以在圆斜率的绝对值大于1后,交换x和y(即步进y值,计算x 值)来调整间距。但这样增加了算法所需的计算量和处理过程,35,高等课堂,另一种消除不等间距的方法是使用极坐标r和来计算沿圆周的点。以参数极坐标形式表示圆方程可得到方程组,36,高等课堂,使用上述方法以固定角度为步长生成
14、显示时,圆就可沿圆周等距点绘制出来。但这个方法使用了三角函数调用和浮点运算,运算速度太慢。 必须寻找只需做一些简单的 整数运算和判别运算的方法即可确定圆上的象素点的算法,37,高等课堂,考虑到圆的对称性可以减少计算量。只要能生成8分圆,那么圆的其它部分可以通过一系列的简单映射变换得到。如图所示,假设已知一个圆心在原点的圆上一点(x,y,38,高等课堂,根据对称性可得另外七个8分圆上的对应点 (y, x),(y, -x), (x, -y),(-x,-y), (-y,-x),(-y, x), (-x, y)。 因此,只需讨论8分圆的生成算法,39,高等课堂,另外,为了方便起见,我们只考虑中心在原点
15、,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标,40,高等课堂,2.2.2中点画圆法,考虑中心在原点,半径为R的圆的第二8分圆。我们来讨论如何从(0,R)到(R/ ),(R/ )顺时针的确定最佳逼近于该圆弧的像素序列,41,高等课堂,假定当前已确定了一个象素点为 p(xp,yp)那么 下一个象素只能是正右方的p1(xp+1,yp) 或右下方的p2(xp+1,yp-1,42,高等课堂,如图所示,构造函数: F(x,y)=x2+y2-R2对于圆上的点,F(x,y)=0;对于圆外的点,F(
16、x,y)0;而对于圆内的点F(x,y)0.假设M是P1和P2的中点,即M(xp+1,yp-0.5,43,高等课堂,那么当F(M)0时,p2离圆弧更近,应取p2。 当F(M)=0时,在p1与p2之中随便取一个即可,我们约定取p2,44,高等课堂,与中点画线法一样,构造判别式 d=F(M) =F(xp+1, yp-0.5) = (xp+1)2+ (yp-0.5)2-R2当d0,则应取p1为下一象素,而且再下一个象素的判别式为 d=F(xp+2,yp-0.5) =(xp+2)2+(yp-0.5)2-R2 =d+2xp+3,p1,45,高等课堂,所以,沿正右方,d的增量为2xp+3。而若d0,则p2是
17、下一象素,而且下一象素的判别式为: d=F(xp+2,yp-1.5) =(xp+2)2+(yp-1.5)2-R2 =d+(2xp+3)+(-2yp+2) =d+2(xp-yp)+5,46,高等课堂,所以,沿右下方向判别式 d的增量为2(xp-yp)+5。 由于我们这里讨论的是用顺时针方向生成第二个8分圆,因此第一个象素点是(0,R)判别式d的初值为: d0=F(1,R-0.5) =1+(R-0.5)2-R2 =1.25-R,47,高等课堂,由于使用了浮点数来表示判别式d,为了简化运算,摆脱浮点数,在算法中全部使用整数,我们使用e=d-0.25代替d。显然,初始化运算d=1.25-r对应于e=1
18、-r。判别式d0对应于e-0.25,48,高等课堂,算法中其它与d有关的式子可把d直接换成e。又由于d的初值为整数,且在运算过程中的增量也是整数,故e始终是整数,所以e-0.25等价于e0。至此,可以写出完全用整数实现的中点画圆算法。算法中e仍用d来表示,49,高等课堂,圆算法演示,椭圆算法演示,50,高等课堂,上述算法还可以进一步改进,以提高效率。注意到判别式d 的增量是x,y的线性函数,每当x递增1,d递增x=2。每当y递减1,d递增y=2。由于初始象素为(0,r),所以x的初值为3,y的初值为-2r+2,51,高等课堂,再注意到乘2运算可以改用加法实现,因此可写出不含乘法,仅用整数实现的
19、中点画圆算法。读者可自己修改此算法,52,高等课堂,画圆函数,circle(x,y,r); x,y为圆心坐标,r为半径ellipse(x,y,as,ae,rx,ry) 说明:x,y为椭圆的中心坐标;as,ae为椭圆弧的起始角和终止角度;rx,ry为x方向和y 方向的半轴长arc(x,y,as,ae,r)说明:x,y为圆心坐标;as,ae为圆弧起始角和终止角,r为半径,由弧组成的图形,圆环,肾形,53,高等课堂,一、图形的基本要素及其表示方法 体是由若干面构成,而面则由曲线组成,线是点的轨迹。因此构成图形的基本要素是点,第三章 图形几何变换,第一节 几何变换的方法,54,高等课堂,在解析几何中,
20、点可以用向量表示。在二维空间中可以用(x,y)表示平面上的一点,在三维空间中则用(x,y,z)表示空间一点。因此,可以用点的集合(点集)来表示一个平面图形或三维立体,写成矩阵的形式为,55,高等课堂,x1 y1 X2 y2 xn yn,x1 y1 z1 x2 y2 z2 zn yn xn,这样便建立了平面图形和空间立体的数学模型,x1,y1,x2,y2,x3,y3,x4,y4,x1 y1 X2 y2 X3 y3 X4 y4,平面图形,56,高等课堂,二 点的变换,在计算机图形学应用中,常常要进行诸如比例,对称,旋转,平移,投影等各种变换,既然图形可以用点集来表示,也就是说点集定了,则图形也就确
21、定了。那么,如果点的位置改变了,图形也就随之改变。因此,要对图形进行变换,只要变换点就可以了,57,高等课堂,由于点集可用矩阵的方式来表示,因此对点的变换可以通过相应的矩阵运算来实现,即: 旧点集 x 变换矩阵新点集, 变换的基础是矩阵乘法。规则 Aik *Bkj=Cij,58,高等课堂,第二节二维基本变换,a b 若(x,y)为变换前的坐标, c d 为变换矩阵,则有: (x,y)a b = (ax+cy,bx+dy)=(x,y) c d 这里(x,y)为变换后的坐标。变换矩阵中a,b,c,d可取不同值,可以实现各种不同的变换,从而达到对图形进行变换的目的,59,高等课堂,一 比例变换,在变
22、换矩阵中 中,令b=c=0,则比例变换 矩阵: 其中 a,d分别为x,y方向上的比例因子(a,d0)。讨论: 若a=d=1,为恒等变换,即变换后点的坐标不变。 若a=d1,则为等比变换,变换结果是图形等比例放大(a=d1)后等比例缩小( a=d1 )。如下图(1)所示,原三角形ABC给放大2倍后为三角形ABC,60,高等课堂,x y,A B C,A B C,10,20,30,10,20,30,40,A,B,C,A,C,B,1,40,x y,61,高等课堂,10,20,30,40,10,20,30,40,若 a d,则变换后图形将变形,如图(2),原三角形ABC经下式变换后成为ABC,x,y,A
23、 B C,A B C,2,62,高等课堂,二.对称变换,1.对坐标轴的对称变换 点对x轴对称变换有: x=x,y =-y,变换矩阵为: 即 点对y轴对称应有:x=-x,y=y,则变换矩阵为: 即,63,高等课堂,对坐标轴变换后的图形见下图(1,10,20,10,20,1,2.对原点对称变换,64,高等课堂,点对坐标原点对称变换应有:x=-x,y=-y,则变换矩阵 即变换的 图形见下图,A,C,65,高等课堂,3.对45线的对称变换,点对45线的对称变换即让x,y互换坐标,x=y,y=x,变换矩阵为: 即: 对-45线的对称变换,应有x=-y,y=-x,变换矩阵为,66,高等课堂,对+45和-4
24、5的对称变换的图形如下图,67,高等课堂,三.错切变换,令 ,且 c,b之一为0,则, 1.沿x轴错切 令b=0,沿x向错切的变换矩阵为: ,则,68,高等课堂,经此变换后,y坐标不变,x坐标有一增量cy,这就相当于原来平行于y轴的线向x方向错切成与y轴成角的直线,且有tg=y/cy=1/c。当c0时沿+x向错切;c0时,沿-x向错切。 设c=2,对三角形ABC进行错切变换得,69,高等课堂,A B C,A B C,x y,2.沿y轴方向错切 令 c=0, 则,x y,70,高等课堂,设b=2,对三角形ABC进行错切变换得,A B C,A B C,x y,x y,变换的结果是,x坐标不变,而y
25、坐标产生一增量bx,使原来平行于x轴的线倾斜角且 tg = x/bx = 1/b。当b0时,沿+y方向错切;b0时,沿-y方向错切,71,高等课堂,四.旋转变换,假定图形的旋转是绕坐标原点旋转角,逆时针方向为正,顺时针方向为负,变换矩阵 则对点进行旋转变换,72,高等课堂,对三角形ABC进行旋转变换(=60,A B C,x y,x y,A B C,五、平移变换与齐次坐标 上述四种变换都可以通过变换矩阵 那么它是否适合于平移变换呢?若实现平移变换,变换前后的坐标必须满足下面的关系,73,高等课堂,x=x+ x y=y+ y这里x,y是平移量,应为常量,但是应用上述变换对点进行变换,这里的cy,b
26、x均为非常量,因此用原来的2X2的变换矩阵是无法实现平移变换的。 我们把2X2矩阵扩充成3X2矩阵,即令,74,高等课堂,K,m是平移量。这样又带来新的问题,二维图形的点集矩阵是nx2的,而变换矩阵是3x2的,根据矩阵乘法的规则,他们是无法相乘的。为此,我们把点向量也做扩充,将(x,y)扩充为(x,y,1),即把点集矩阵扩充为nx3阶矩阵。这样,点集矩阵与变换矩阵即可进行乘法运算,75,高等课堂,令变换矩阵中b、c=0,a、d=1,就得 到平移变换矩阵 ,则有 这里k,m分别为x,y方向的平移量,76,高等课堂,为了使二维变换矩阵具有更多的功能,可将3x2变换矩阵进一步扩充为3x3阶矩阵,即
27、,则平移变换矩阵为: 如令k=10,m=10,对 三角形ABC做平移变换,得,77,高等课堂,A B C,x y,A B C,20,10,10,20,A,B,C,A,B,C,78,高等课堂,在上述讨论中,我们将(x,y)扩充为(x,y,1),实际上是由二维向量变为三维向量,但(x,y,1)可以看作是z=1平面上的点,也就是说,经此扩充后,图形落在z=1的平面上,它对图形的形状没有影响。 这种用三维向量表示二维向量的方法叫做齐次坐标法。进一步推广,用n-1维向量表示n维向量的方法称之为齐次坐标法,79,高等课堂,二维变换实例,80,高等课堂,图形顶点表,图形连边表,1,2,3,4,5,6,7,8
28、,81,高等课堂,第三节 二维组合变换,上述的五种变换可用统一的变换矩阵形式实现,我们把它们叫做基本变换。但是有些变换仅用一种基本变换是不能实现的,必须由两种或更多种基本变换组合才能实现。这种由多种基本变换组合而成的变换称之为组合变换,相应的变换矩阵叫做组合变换矩阵,82,高等课堂,一 、绕任意点旋转变换,平面图形绕任意点p(Xp,Yp)旋转角,需要通过以下几个步骤来实现: (1)将旋转中心平移到原点,变换矩阵为,83,高等课堂,2)将图形绕坐标原点旋转角,变换矩阵为: (3)将旋转中心平移回到原来点的位置,变换矩阵为,84,高等课堂,因此,绕任意点的旋转变换矩阵为: 显然,当Xp=0,Yp=
29、0时,即为对原点的旋转变换,85,高等课堂,二、对任意直线的对称变换 设任意直线的方程为Ax+By+C=0,直线在x轴和y轴上的截距分别为-C/A 和 C/B ,直线与x的夹角为, =arctg (-A/B)。对任意直线的对称变换有以下几个步骤来完成: (1)平移直线,使其通过原点(可以沿x轴平移,也可沿y轴平移,这里以沿x轴平移为例),变换矩阵为,86,高等课堂,2)绕原点旋转,使其与x轴重合,变换矩阵为: (3) 对x轴对称变换,其变换矩阵为,87,高等课堂,4)绕原点旋转使直线回到原来与x轴成的位置,变换矩阵为: (5)平移直线,使其回到原来的位置,变换矩阵为,88,高等课堂,通过上述5
30、个步骤,即可实现图形对任意直线的对称变换,其组合变换矩阵为: 综上所述,复杂变换是通过基本变换的组合而成的。由于矩阵的乘法不适用于交换律,即: ,因此组合的顺序一般是不能颠倒的,顺序不同,则变换的结果亦不同,89,高等课堂,以平移变换与旋转变换的组合为例 (1)先进行平移变换,再进行组合变换 (2)先进行组合变换,再进行平移变换,90,高等课堂,从变换矩阵T1和T2可以看出,前者变换最后的平移是受旋转变换的影响。后者变换后的平移量则不受旋转变换的影响。 如下图所示 ,取平移量l=15,m=15,旋转角度=90。对 ABC分别进行变换得,A,C,B,A,C,B,A,C,B,A,C,B,91,高等
31、课堂,变换矩阵T1(先平移再旋转) 变换矩阵T2(先旋转再平移,A B C,A B C,A B C,A B C,92,高等课堂,第四节 三维基本变换,一、三维基本变换矩阵 1.变换矩阵 三维图形的变换是二维图形的简单扩展。变换的原理还是把齐次坐标点(x,y,z,1)通过变换矩阵变换成新的齐次坐标点( x,y,z,1 )。 与前面讨论的类似,在三维空间里,用四维齐次坐标(x,y,z,1)表示三维点,93,高等课堂,三维变换矩阵则用4x4阶矩阵表示,即: (x,y,z,1). T = (x,y,z,1) 其中T为三维基本变换矩阵: 可以把三维基本变换矩阵划分为四块,其中 产生比例,对称,错切,旋转
32、 等基本变换,94,高等课堂,产生平移变换, 产生透视投影变换 产生全比例变换。 2.坐标系 在三维变换中,我们采用右手坐标系,习惯上人们一般采用下图的左手坐标系,且规定,物体绕各坐标旋转的正方向对右手的螺旋方向,x,z,y,95,高等课堂,二.比列变换 比例变换矩阵为: 其中a,e,j分别为沿x,y,z轴方向的比例因子。 对点进行比例变换:(x,y,z,1)* Ts =(ax,ey,jz,1)=(x,y,z,1,96,高等课堂,三.对称变换 三维对称变换包括对原点,对坐标轴和对坐标平面的对称,常用的是对坐标平面的变换,我们对此加以讨论: (1)对xoy平面的对称变换 变换矩阵,97,高等课堂
33、,2)对xoz平面的对称变换 变换矩阵: (3)对yoz平面的对称变换 变换矩阵,98,高等课堂,四.错切变换 错切变换是指三维立体沿x,y,z三个方向错切,错切变换是画斜轴测图的基础。其变换矩阵为: 由变换结果看出,一个坐标的变化受另外的两个坐标变化的影响,99,高等课堂,1)沿x轴含y错切 变换矩阵: 错切变换,100,高等课堂,2)沿x含z错切 变换矩阵: 错切变换,101,高等课堂,3)沿y含x错切 变换矩阵: 错切变换,102,高等课堂,4)沿y含z错切 变换矩阵: 错切变换,103,高等课堂,5)沿z含x错切 变换矩阵: 错切变换,104,高等课堂,6)沿z含y错切 变换矩阵: 错
34、切变换,105,高等课堂,五.旋转变换 (1)绕x轴旋转角 (2) 绕y轴旋转角,106,高等课堂,3)绕z轴旋转角 六.平移变换,107,高等课堂,第五节 空间立体图的投影变换,一、概述 (一)什么是投影变换,为什么要投影? 投影是将n维的点变换成小于n维的点,这一部分只介绍三维到二维平面的几何投影。即将立体坐标变换成平面坐标。 因为显示器和绘图仪是平面设备。设备坐标只有x,y,要显示图形,就要将第三个坐标去掉,如何去掉一个坐标?投影,108,高等课堂,二)平面几何投影的分类 投影可分为两大类,即透视投影和平行投影。他们的本质区别在于透视投影的投影中心到投影平面之间的距离是有限的,而平行投影
35、的投影中心到投影面之间的距离是无限的。当投影中心在无限远时,投影线互相平行,所以定义平行投影时,给出投影线的方向就可以了,而在透视投影时,需要明确地给出投影中心的位置,109,高等课堂,下面给出各类投影之间的逻辑关系: 投影 透视投影 平行投影 一点透视 二点透视 三点透视 正投影 斜投影 三视图正轴测,主视图,侧视图,俯视图,斜 等 测,斜二测,等 轴测,正二测,正三测,110,高等课堂,1.平行投影 平行投影不具有透视缩小性,能精确地反映物体的实际大小。平行线的平行投影仍是平行线。平行投影可根据投影方向与投影角的夹角分成两类:正投影和斜投影。当投影方向与投影面的夹角为90时,得到的投影为正
36、投影,否则为斜投影,投影方向,投影平面,投影平面法向,法向,投影平面,111,高等课堂,正投影根据投影面与坐标轴的夹角可分成两类(1)三视图和(2)正轴测。当投影面与某一坐标轴垂直时,得到的投影为三视图,这时投影方向与这个坐标轴的方向一致。否则,得到的投影为正轴测。 2.三视图 工程制图中常用到的三视图,是由空间一个立体向三个互相垂直的投影面做正投影得到的。这个正交的投影面分别为:正投影面(v面),侧面投影面(w面),水平,112,高等课堂,投影面(h面)。这三个面对应的三个坐标平面分别为:xoz平面,yoz平面和xoy平面。 1)、正投影视图 正投影视图是将立体向正面投影面(xoz坐标平面)
37、作正投影得到的,投影的结果是一坐标轴为0,仅保留了x轴和z轴两个方向上的坐标。 变换矩阵为: 即,113,高等课堂,2).侧投影视图 立体侧投影图的形成过程是:先将立体向侧面投影面做正投影(x坐标取0);然后将投影面绕z轴选择90,使其与正面投影处于同一平面;最后使图像沿x轴负向平移一个距离d1,使正投影图和侧投影图之间保持一个距离,变换全过程,114,高等课堂,变换结果为(x,y,z,1)=(x,y,z,1)Tw=(-y-d1,0,z,1) 3.水平面(h面)投影变换矩阵 将立体向h面(z=0)做垂直投影,再使得到的投影绕x轴旋转90,最后沿z向平移-n(n0),以使其与正投影面处于同一平面
38、,使水平投影图和正面投影图拉开一个距离,变换过程为,115,高等课堂,变换结果为(x,y,z,1)* Th = (x,0,-y-d3,1) =(x,y,z,1,116,高等课堂,设立体图的点集矩阵为(Dj),各投影图之间的距离为10,求立体的三面投影。 已知,117,高等课堂,解: 1)正面投影,118,高等课堂,2) 水平投影,119,高等课堂,3) 侧面投影,120,高等课堂,用变换后的 , , ,画出的三视图如下图,x,z,121,高等课堂,4.4.2正轴测投影图,轴测图是一种简单的立体图形,能给人一种直观的形象,以帮助建立空间的概念.由于它的绘制方法比较简单,所以在工程制图中经常用到.
39、 1.正轴测投影图的形成过程是这样的:先将空间一立体绕z轴正向旋转角,然后再绕x轴反向旋转角,最后让经过两次旋转后的立体向正立投影面做正投影,122,高等课堂,整个形成过程可以用矩阵表示为,式子中, 和均取大于0的值,123,高等课堂,上面的矩阵T是经过 3个单步简单矩阵变换的级联形成的,它是一个正轴测投影交换矩阵的一般形式。因此,只要任意给定一组和角,代入矩阵T,就可以产生一种正轴测投影矩阵,由此,可用以生成正轴测投影图,124,高等课堂,在正轴测变换过程中: x y z 1=x y z 1 T=xcos-ysin 0 -sin(xsin+ycos)+zcos 1,从上式可以看到,交换的结果
40、使y坐标为0,所以对于一般的二维坐标系来说,y坐标就相应于现在的z坐标,125,高等课堂,2.正等测和正二测 正等轴测投影图和正二等轴测投影图是正轴测投影图中常用的两种,其中正等测用手工绘制方法简便;正二测的立体感较好,但手工绘制方法没有正等测方便。当用计算机来生成的时候,就不存在方法上的差别,区别只是变换矩阵中的元素值不同而已,126,高等课堂,1)正等测的变换矩阵任一组和的角,可以产生一种正轴测投影变换矩阵。当取=45o, =35o16时,代入矩阵T,就可以得到正等轴测投影的变换矩阵T,127,高等课堂,2)正二测的变换矩阵,形成正二等轴测投影的一组角度和的取值为: =20o 42;=19
41、o 28。将此和的值代入正轴测矩阵,便可得到正二测的变换矩阵,128,高等课堂,3.轴测图的编程步骤,下面,我们通过一个简单的立体例子,来说明设计和编写绘制轴测图的绘图程序的步骤。设所需绘制的立体如下图,则工作步骤如下:在草纸上绘制出草图,并确定各顶点的序号和相应顶点的坐标值,建立顶点表和边表,如下二个表,129,高等课堂,130,高等课堂,在程序中定义两个数组,用于定义顶点表和连边表。通过数组的初始化给两个数组赋初值。 实施对立体进行正轴测投影变换,即用正轴测投影变换矩阵顶点表实现。这样,可以得到一个变换后的新的顶点表,131,高等课堂,用新顶点表的顶点坐标值,注意此时只有x坐标轴和z坐标轴
42、,y坐标轴已在投影中消掉,所以是以x坐标为绘图的x坐标,以z坐标为绘图的y 坐标。按连边表中的连边规则,用line函数在顶点之间两两连线,132,高等课堂,在绘图程序中要注意两点: 在建立立体坐标时,为了取顶点坐标值简便,我们把立体的一个顶点放置在坐标的原点,所以,整个轴测投影变换后的图形是以该原点为中心。但图形输出时的中心应以屏幕中心为宜,比如,对于VGA来说,这个中央点在(320,240)处。 该绘图程序目前只能按连边表把立体的所有棱边都画出来,而不考虑是否可见,即没有经过消除隐藏线处理,133,高等课堂,四.透视投影图 1.透视变换矩阵 在前面讲的三维变换矩阵 中,已经说过, 所产生透视
43、投影的效果。现在我们来具体讨论,当其中的p,q,r三个参数为非全0时,这样的变换矩阵会对变换产生什么样的影响,134,高等课堂,1)一点透视 先设 q0,p=r=0。然后对点(x,y,z,1)进行变换,结果如下: 对其结果进行齐次化处理,得,135,高等课堂,当y取值不同时,上式会产生如下不同的结果: 当y=0时,得: 而原来处于y=0的平面内的点,经过变换以后没有变化。 当y 时,得,136,高等课堂,这说明,当y 时,所有的点的变换结果都集中到了y轴上的1/q处。 即所有平行与y轴的直线最终延伸将相交(0,1/q,0)的点,该点称为“灭点”。而象这样形成的一个灭点的透视变换称为“一点透视”
44、。为了取得较好的效果,我们取q0,让灭点位于y轴的负半轴上。一点透视的效果如下,137,高等课堂,根据同样的道理,当p0,q=r=0时,则将含在x轴上的1/q处产生一个灭点,其坐标值为(1/q,0,0)。在这种情况下,所有平行于x轴的直线将延伸交于该点。 当r 0,p=q=0时,产生的一个灭点位于z轴上的1/r处,灭点的坐标为(0,0,1/r)。所有平行与这轴的直线将延伸交于该点,138,高等课堂,2)多点透视 根据一点透视的原理予以推广,如果在p,q,r三个元素中有两个为非零元素时,这将会产生两个灭点,因此得到两点透视。 经过齐次处理结果为,139,高等课堂,从以上结果可以得到: 当x 时,
45、一个灭点在x轴上的1/p处。 当z 时,另一个灭点在z轴上的1/r处。 这时,立体上所有平行于x轴的棱线,延伸时将相交于x轴上点(0,0,1/r)处。 同理,当p,q,r三个元素全为零时,结果将会产生三个灭点,从而形成三点透视。产生的三个灭点分别在x轴上的1/p处,y轴上的1/q处和z轴的1/r处,140,高等课堂,2.生成透视投影图的方法 生成透视投影图的过程分为两步:先是对立体进行透视变换;然后是将其投影到正面投影面上, 形成投影面上,形成正投影图。用矩阵形式表示为,141,高等课堂,1)一点透视图的生成 在生成一点透视图时,为了避免把图所属立体安置在坐标系的原点而产生如下图所示的透视效果
46、,z,x,o,x,z,o,142,高等课堂,通常是在进行透视投影变换前,先将立体平移到一个合适的位置,然后再进行透视投影变换,使得产生的透视图效果较好。 生成一点透视投影的变换矩阵为,143,高等课堂,当d1,d2,d3和q取确定的非零值后,该矩阵中包含的三个透视变换参数中有一个为非零,所以该变换矩阵能产生一点透视图。在q的取值时,一般取-1q0,以获得较好的透视图形效果。 (2)二点透视图的生成 两点透视图的生成过程是:先将立体绕z轴旋转一个角,以使得立体上的xoz坐标平面和yoz坐标平面与正面投影面产生一定的倾斜角;然后在对立体进行透视变换并向正面投影面进行投影。 因此,二点透视也角“成角
47、透视,144,高等课堂,二点透视投影图的形成过程用矩阵形式表示为,145,高等课堂,从该变换矩阵中可以看到,矩阵中的三个透视变换参数中有两个为非0,即qsin和qcos 。故生成的透视图为两点透视。 (3)三点透视投影图的生成 分以下四步: a.先将立体绕z轴选择正角; b.再将立体绕x轴取向选择角( 0); c.进行透视变换; d.往正投影面进行正投影,146,高等课堂,用矩阵的形式表示这个变换过程为: 从以上的变换矩阵T可以看到,矩阵中的三个透视变换参数均非0,因此可以变换生成三点透视图,147,高等课堂,第四章、多边形及多边形填充算法,在这一节中将讨论图形系统中的新图元多边形,研究有关多
48、边形的概念以及如何表示多边形,学习如何判断一个点是否在多边形内的方法,以及多边形填充的各种方法,148,高等课堂,一、多边形的概念,所谓多边形,就是用一系列首尾相连的线段构成图形。这些组成多边形边界的线段称为多边形的边,多边形的边的端点称为多边形的顶点。一般来说,一个多边形应是封闭的,149,高等课堂,1.凸多边形与凹多边形,多边形又分为两大类:凸多边形与凹多边形。 所谓凸多边形,是指这样一类多边形:如果在多边形内任找两个点,将这两个点用线段连接后,此线段上所有的点都在多边形内,这就是凸多边形。而凹多边形就是非凸多边形,150,高等课堂,下面给出了凸多边形与凹多边形的例子,可见,三角形总是凸多
49、边形,凸多边形,凹多边形,151,高等课堂,2.多边形的描述,考虑到多边形的特征属性:顶点和边,在描述多边形时,既要指明组成多边形的顶点,又要指出组成多边形的边。 一般来说,用顶点的序列来表示多边形,其中的边即指两顶点所构成的线段,这样来表示的多边形如下,152,高等课堂,图中多边形顶点序列为p1 p2 p3 p4 p5 p6 p7。可以根据这种方法写出在计算机上绘制多边形的算法: draw_polygon(int N,int pN2) if(N=2) return(); else for(i=1;iN;i+) line(pi0,p i1,pi+10,pi+11); line(p10,p11,
50、pN0,pN1);,153,高等课堂,二多边形的填充,1.点是否在内部的检验,p5,154,高等课堂,S3(s4,155,高等课堂,156,高等课堂,157,高等课堂,2连贯性原理,梯形的两底边分别在y=yk和y=yk+1两条扫描线上,腰在多边形p的边上或在显示屏幕的边界上,区域的连贯性,Yk+1,yk,158,高等课堂,这些梯形分为两类:一类位于多边形内部(图中粉色部分),另一类位多边形外部。 两类梯形在长方形区域上相间排列,即相邻的两个梯形必有一个在多边形内,一个在多边形外,159,高等课堂,交点数为偶数;相邻交点间的线段也分为两类:一类线段上所有点均在多边形内部,另一类线段上所有点均在多
51、边形外部; 两类线段在扫描线上相间排列,扫描线的连贯性 对于多边形与扫描线y=yk相交,交点序列 x1,x2,x3,x4,x5,x6 由连贯性可知,此交点序列具有下列性质,160,高等课堂,边的连贯性,161,高等课堂,三、多边形填充算法,1、扫描线算法,扫描线算法的步骤为:在EL中找出非空元素的最小序号:将边的活化链表置空;按从下至上的顺序分别处理每一条扫描线,直到边的分类表EL和边的活化链表均为空为止,162,高等课堂,处理扫描线步骤为,对于扫描线y=yc,若EL中非空,则将其所有的边从EL中取出,并且插入到边的活化链表中,并将AEL中各边按x递增顺序; 若相对于当前扫描线,边的活化链表A
52、EL非空,则将AEL中的边两两依次配对,即第1,2边为一对,第3,4边为一对,依次类推,每一对边与当前扫描线交点所构成的线段位于多边形内,依次将这些线段上的点进行着色,163,高等课堂,将边的活化链表中满足y=ymax的边删去; 将边的活化链表AEL中剩下的每一条边的x域累加x,即x=x+x; 将当前的扫描线的纵坐标y累加1,即y=y+1,重复执行,164,高等课堂,种子填充算法,将种子象素压入栈;当栈非空时 a.从堆栈弹出一个象素;b.将该象素置成所要求的色彩值;c.检查当前每个象素邻接的四连接象素是否是边界色或已置成所要求的色彩值,若是则返回,否则将该象素压入堆栈后再回到,165,高等课堂
53、,多边形填充函数,1. drawpoly 画多边形 drawpoly(n,*pt)n是多边形顶点数,*pt是多边形顶点坐标数组名2. fillpoly 画并填充一多边形 fillpoly(n,*pt)3. floodfill 填充一个有界区域 floodfill(x,y,bcolor) x,y填充区域内的一点坐标,bcolor填该域边界颜色4.setfilllstyle(pallern,color)设置填充模式和颜色,166,高等课堂,扫描线种子填充算法步骤,1.从包含种子象素的栈中弹出种子象素2.沿着扫描线对种子象素左右象素进行填充,直到遇到边界象素为止,这样就将种子所在的扫描线中元素填充,
54、167,高等课堂,3.区间内最左最右元素为xleft 、xright。则在xleftxxright中检查与当前扫描线相邻的上、下两条扫描线是否全为边界象素或正填充过的象素,若不是,则对于xleftxxright,把每一区间的最右象素作为种子压入堆栈中算法结束条件为栈空。此算法适用于边界定义的区域,168,高等课堂,169,高等课堂,区域填充算法,扫描线填充算法,种子填充算法,边缘填充算法,4-连通边界填充算法,4-连通边界填充算法(2,8-连通边界填充算法,8-连通泛填充算法,170,高等课堂,第五章 图案及动画程序设计,第一节、图案程序设计 第二节、动画程序设计,171,高等课堂,第一节 图
55、案程序设计 1.构造功能模块的原则 (1) 独立性 (3)开放性 (2) 抽象性 (4)继承性,172,高等课堂,2.正多边形子程序的设计 (1)顶点定位的正凸多边形 a.选择绘图参数 对于一个任意的正多边形来说,如下图所示,p1,p2,p3,p4,p0(x0,y0,173,高等课堂,它所需要的定形参数为: 边数n(n不能小于3); 边长a。 定位参数为: 定位顶点Po的坐标(x0,y0) 起使边的倾角。 给定了这两组参数,就可以唯一地确定一个任意位置、形状和大小的正多边形。但在绘图程序中,必须把这两组参数转化为具体的绘图用数据,174,高等课堂,根据图形中的几何关系,可以列出计算机正多变形各
56、顶点坐标的算式。 其中, =2/n,175,高等课堂,b.编写汇编绘图程序 根据以上的分析和数据的准备,下面便可以着手编写绘制任意正多边形的程序。 图形程序见程序2_4。其中,函数polygon为绘制任意正多边形的通用绘图程序,函数中有5个形参。 . X0,Y0 定位顶点坐标; . A 正多边形边长; . n 正多边形边数; .af 起始边与x轴正向的夹角,176,高等课堂,177,高等课堂,2)以外接圆圆心定位的正多边形 a.选择绘图参数 利用正多边形的外接圆这种方法中,定形参数为: . 边数n(n不能小于3); . 外接圆半径R。 定位参数为: . 外接圆圆心坐标(x0,y0); . 起始
57、点半径的倾角,178,高等课堂,根据以上给定的参数,同样可以列出计算多边形各顶点坐标的算式。 其中: =2/n,179,高等课堂,b.编写绘图程序,180,高等课堂,3)正凹多边形子程序 所谓正凹多边形,即通常所称的多角形。如下图所示的五角形和六角形,p3,p5,p1,p7,p9,p4,p2,p6,p8,p10,五角形,六角形,181,高等课堂,也就是说,N角形有2N个顶点。顶点分别位于外接圆和内接圆圆周上,称作外顶点和内顶点。若奇数点为外顶点,则偶数点一定为内顶点。当一个N角形的外接圆半径R已知时,其内接圆半径R通过下面的推到求得: 抽出三角形PoP =2/2N= /N =(N-4) /N,
58、p2,p1,o,182,高等课堂,在三角形 op1p2中。 p1op2= op1p2=/2 所以, p1op2=- p1op2- op1p2 = -(N-4) /N+ /N ) = -(N-2) /2N,183,高等课堂,因此,根据多角形的外顶点N,外接圆半径R,第一个顶点的其实角及中心点O的坐标(x0,y0),就可编出正凹多边形的程序,184,高等课堂,算法实例,185,高等课堂,程序1,分形图形,程序2,程序3,程序4,186,高等课堂,方块旋转,187,高等课堂,动画1,188,高等课堂,动画2,189,高等课堂,动画3,190,高等课堂,第六章、裁剪算法,第一节 窗口和裁减第二节 直线
59、的裁减第三节 多边形的裁减第四节 窗口视区变换,191,高等课堂,第一节 窗口和裁减,窗口裁减覆盖,xl,yb,xr,yt,窗口,192,高等课堂,剪裁的应用包括,1、从定义的场景中抽取出用于观察的部分;2、在三维视图中标识出可见面;3、防止线段或对象的边界混淆;4、用实体造型来创建对象;5、显示多窗口的环境;6、允许选择图形的一部分来进行拷贝,移动和删除,193,高等课堂,第二节 直线段的剪裁,被剪裁的可以有各种不同类型的图形元素,比如点、线段、圆弧、字符以及多边形.剪裁判断的依据是一对不等式,通过它们可以测定点(x,y)是否落在窗口内,xlx xrybyyt,剪裁方法:只要逐点比较每个点的
60、坐标值(xi,yi),看其是否同时满足不等式组时,才能确定该点是落在窗口内的,否则是在窗口外的,194,高等课堂,对于任意一条直线,它相对于一个正定义的窗口的位置关系不外乎有四种情况,直线在窗口外a直线包含在窗口内b直线段和窗口的一条边框相交c直线贯穿整个窗口 f e,195,高等课堂,归纳可得出一个结论:对于任意一条直线,它要么被排除在窗口外,要么在窗口内留下一个可见段,并且只有一个可见段。因为一个直线段可以用它的两个端点唯一确定,所以,要确定一条直线段上位于窗口以内的可见段,仅需求得它的两个可见端点就行,算法演示,196,高等课堂,一、cohen-sutherlanol算法 (编码剪裁算法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 附着升降脚手架安装拆卸工岗位操作规程考核试卷及答案
- 锯材定长切割工艺考核试卷及答案
- 稀土金属热处理精炼沉积工艺考核试卷及答案
- 2024新版2025秋青岛版科学六三制三年级上册教学课件:第三单元 第10课 哪杯水热
- 职业适应性测试(带答案)
- 高职课程思政教学评价的价值意蕴、实践痛点与行动路向
- 许昌职业技术考试试题及答案
- 安全生产与特种设备相关法规知识试卷含答案
- 银行主任面试题目及答案
- 银行营销技术试题及答案
- 标准方向讲解
- 2024年成都隆科城乡发展集团有限公司招聘笔试冲刺题(带答案解析)
- 超全QC管理流程图2015
- (正式版)YST 1682-2024 镁冶炼行业绿色工厂评价要求
- 小区监控维修方案
- 《国际中文教育概论》课件全套 第1-12章 从对外汉语教学到国际中文教育- 国际中文教育前瞻
- 高血压 糖尿病 健康宣教
- 高职高专院校《作物遗传育种》课程的教学探索获奖科研报告论文
- 2023恒温恒湿实验室工程技术规程
- GB/T 4798.4-2023环境条件分类环境参数组分类及其严酷程度分级第4部分:无气候防护场所固定使用
- 程序设计基础(第3版)(2019年高等教育出版社出版图书)
评论
0/150
提交评论