Transcript Document
第2章 计算机图形处理技术 1 2 2.2图形变换 在计算机图形处理中,经常需要对已经生成的图形进行 几何变换处理。例如,改变图形的大小、移动图形或根据 需要将图形旋转一个角度,输出零件的三面视图,显示立 体图,或要求一物体绕一轴线作连续的动态转动,使观察 者能看到物体的各个侧面。这就要求图形的处理软件能够 实现旋转、平移、缩放等几何变换。 我们知道,点是构成一个几何形体的最基本的元素。 一幅二维图形可以看成是一个点集。那么,我们就可以把 对图形的几何变换归结对点的变换。 3 2.2.1 图形变换方法 一、点的向量表示 在二维空间中点的表示方法,我们通常是用它的坐标来 表示,写作P(x,y)。为了以后变换的方便,我们可以把 它写作矩阵的形式,即用一行两列的矩阵 x y 或一个两 x 行一列的矩阵 表示。在三维空间里则用 x y z y 表示空间一点。那么,对于一个二维空间的图形或三维空间 的立体,可以用一个点的集合(简称点集)来表示,每个点 对应一个行向量,则点集为n×2或m×3阶的矩阵: x1 x 2 xn y1 y2 y n n 2 或 x1 x 2 xm y1 y2 ym z1 z2 zm m 3 4 例如:已知三角形ABC顶点的坐标分别为A(x1, y1),B(x2,y2),C(x3,y3)则三角形ABC可以 记作矩阵: x1 x2 x3 y1 y2 y 3 然后把它以数组的形式存贮在计算机内。 5 二、齐次坐标 齐次坐标是将一个n维空间的点用n十1维,即附加一个 坐标来表示。如二维点[x y]的齐次坐标通常用三维坐标 [Hx Hy H]表示,三维点[x y z]的齐次坐标通常用四 维坐标[Hx Hy Hz H]表示,……。 在齐次坐标系中,最后一维坐标H称为比例因子。由 于比例因子H的取值是任意的,所以任一点可用许多组齐 次坐标表示,如二维点[3 2]可表示为[3 2 1]、[6 4 2]、[9 6 3]等。另外,可用H=0的向量表示无穷远的点。 例如用[1 0 0 0]、[0 1 0 0]、[0 0 1 0]分别表 示x,y,z轴上的无穷远点。 对齐次坐标进行坐标变换称为齐次变换, 相应的变换矩阵称为齐次变换矩阵 6 反过来,还可以通过矩阵变换将无穷远点变换为与之 对应的有限远点。当H=1时,则称为规范齐次坐标。从 齐次坐标返回到n维空间去时,只需将坐标中每个分量除 以H就可以了。以后介绍的变换矩阵实际上都是奇次坐标 变换。 用齐次坐标方式进行变换运算不但可以产生正常坐标 变换的同样效果,而且可以简化正常坐标变换过程。在 图形变换中引入齐次坐标表示,还能使各种基本变换, 如旋转、平移和比例交换等具有统一的变换矩阵格式, 并且可以将它们结合在一起进行组合变换,同时也便于 计算。 7 三、变换矩阵 由于图形可以用点集表示,因此要对图形进行变换, 只要变换点就可以了。 对点的变换可以通过相应的矩阵运算来实现,即: 矩阵运算 新点(集) 旧点(集)×变换矩阵 若将二维空间的点由某个位置P(x ,y)变换到一个新的 位置P*(x*,y*),变换的原理是把齐次坐标点(x,y,1) 通过变换矩阵变换成新的齐次坐标点(x*,y*,1)。即: x y 1 x * y * 1 8 T为基本变换矩阵: * * * + P (x ,y ) + P ( x, y) a c b d 从变换功能上可把T分为四个子矩阵,其中 对图形进行比例、旋转、对称、错切等变换; [ l m ] 对图形进行平移变换; [ p q ]T 对图形进行投影变换,不做投影变换时取p = 0, q = 0; [ s ] 对图形进行全比例变换。通常取s=1。 9 三维图形的变换矩阵是二维图形变换矩阵的 简单扩展,在三维空间中,用四维齐次坐标表示 三维点,即[x y z 1]。三维变换矩阵则采用 4×4阶矩阵表示,即: a d h l b c e f i j m n p q r s 10 a d h l 齐次变换矩阵: a d h b e i 缩放 旋转 错切 c f j l m 平移 n b c e f i j m n p q r s s 整体缩放 p q r 透视变换 11 2.2.2 二维图形的几何变换 一、基本几何变换 1、平移变换 2、比例变换 3、旋转变换 4、对称变换 5、错切变换 二、组合变换 12 一、基本几何变换 1、平移变换 平移变换是将图形在坐标平面内移动,只改变图形 的位置,不改变图形的大小和形状。平移变换如图所示: y C A m B C A B O l x 图中l、m分别为x、y方向的平移量。从图中可以得出变 换前后点的坐标值应满足以下关系: x x l y y m 13 将它写成矩阵的形式为: 1 0 0 x y 1 0 1 0 l m 1 那么 1 0 l 0 1 m = x l y m 1 = x * y * 1 0 0 1 即为所求平移变换矩阵。 14 例1:已知三角形顶点坐标为A(0,0),B(20,0),C(0, 20),平移参数分别为l=20,m=10;试对此三角形 进行平移变换。 解:因为平移变换矩阵为 所以变换后点的坐标为 15 2、比例变换 比例变换指将原有图形在x、y两个方向上进行放大 或缩小的变换,通过它可以改变图形的大小和方向。 将平面上一点P(x,y)在x、y两个方向上分别进 行放大a倍和d倍的比例变换后得到新点P*(x*,y*), P和P*的关系为: x ax y dy 写成矩阵的形式为 x y a 1 0 0 0 d 0 0 0 1 = a x dy 1 = x * y * 1 16 其中,T= a 0 0 0 d 0 0 0 1 称为比例变换矩阵,a、d分别 为沿 x、y方向上的比例因子,且a、d>0。a、d的取值 不同,变换效果也不同,如下所述: (1)如果a =d = 1,变换为恒等变换,即变换后点的 坐标不变。 (2)如果a = d≠1,变换为等比例变换。其中,如果a = d > 1,变换为等比例放大;如果a = d < 1,变换则 为等比例缩小。如图(a)、(b)所示。 (3)如果a ≠ d,变换后的图形会产生畸变。如图(c) 所示。 17 C* y y A* A B* A o A* B x (a)a = d > 1 A* B C* C o C* y C B* C B* A x (b)a = d < 1 B o x (c)a d 18 例2:a=2,d=1时,假设变换前A(1,1),B(2,1), C(1,2),那么,变换后为A*(2,1), B*(4,1),C*(2,2),△ABC与△A*B*C*不相似。 19 3、旋转变换 旋转变换一般指图形绕坐标原点旋转一个角度 , 规定为:绕原点逆时针方向旋转为正,顺时针方向为负。 经过旋转变化后不改变图形自身的大小、形状等,只改变 图形的方向。连续的旋转变换相当于将其旋转角度叠加之 后的旋转变换。 将平面上一点P(x,y)绕坐标原点逆时针旋转 变换后得到新点P1(x1,y1),P和P1的关系为: 角, 20 4、对称变换 对称变换又称为反射变换或镜像变换。 (1)关于坐标原点的对称变换 将平面上一点P(x,y)进行关于原点的对称变换后 得到新点P*(x*,y*),P和P*的关系如图(a)应为: x*=-x,y*=-y,写成矩阵形式为: x y 1 1 0 0 0 1 0 0 0 1 = x y 1 x = * y y 其中: 1 0 0 0 1 0 0 1 * 1 C 0 为关于 原点的对称变换矩阵。 A B* A* C* o B x 22 (2)关于x轴的对称变换 将平面上一点P(x,y)进行关于x轴的对称变换 后得到新点P*(x*,y*),P和P*的关系如图(b)应 为:x*=x,y*=-y,写成矩阵形式为: 1 0 0 x y 1 0 1 0 0 0 1 其中: 1 0 0 = x 0 1 0 0 1 y 1 = x * y * 1 y 0 为关于 x轴的对称变换矩阵。 C A o A B * B* x C* 23 (3)关于y轴的对称变换 将平面上一点P(x,y)进行关于y轴的对称变换后 得到新点P*(x*,y*),P和P*的关系如图(c)应为: x*=-x,y*=y,写成矩阵形式为: x 其中: 1 0 y 1 0 1 0 0 0 0 = 1 1 0 0 0 0 1 0 1 0 x y 1 = x * y * 1 y 为变换矩阵。 B* C* C A* A o B x 24 (4)关于y=x的对称变换 将平面上一点P(x,y)进行关于直线y=x的对称变换 后得到新点P*(x*,y*),P和P*的关系如图(d)应为: x*= y,y*= x,写成矩阵形式为: x 其中: 0 1 0 y 1 1 0 0 0 0 1 0 1 0 1 0 0 = y 0 0 1 x 1 = x * y * 1 y B 为变换矩阵。 A C o x A* B* C* 25 (5)关于y=-x的对称变换 将平面上一点P(x,y)进行关于直线y= - x的对称变 换后得到新点P*(x*,y*),P和P*的关系如图(e)应为: x*=-y,y*=-x,写成矩阵形式为: x 其中: y 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 0 = y x 1 0 0为变换矩阵。 1 = x * * y 1 y C A B* A* o B x C* 26 5、错切变换 错切变换是使图形沿错切方向的坐标发生变化,而另 一方向的坐标值不变,从而达到使原图形发生特定变化的 目的。错切变换分沿x轴和沿y轴错切两种形式。 (1) 沿x轴方向的错切 将平面上一点P(x,y)进行沿x轴方向的错切变换后 得到新点P*(x*,y*),变换过程如图(a)所示,从图中 可以看出,沿x轴方向错切变化后,y坐标不变,x将产生一 个增量△x = cy,而且c当取正值时,沿x轴的正方向进行 错切,反之c取负值。P和P*的关系为:x*=x+cy,y*=y。 写成矩阵形式为: 27 1 0 0 x y 1 c 1 0 = x cy y 1 = x * y * 1 0 0 1 1 c 0 其中: 0 0 1 0 1 0 为变换矩阵。 y y cy D C D* C* D* B* C (C*) A (A* ) • B(B*) x (a)沿x轴方向的错切 A (A* ) D bx B (b)沿y轴方向的错切 x 28 (2)沿y轴方向的错切 将平面上一点P(x,y)进行沿y轴方向的错切变换后 得到新点P*(x*, y*),变换过程如图(b)所示,从图 中可以看出,沿y轴方向错切变化后,x坐标不变,y将产 生一个增量△y = bx,而且当b取正值时,沿y轴的正方向 进行错切,反之b取负值。P和P*的关系为:x*=x, y*=bx+y。写成矩阵形式为: x 1 b 0 y 1 0 1 0 0 0 1 其中: 1 0 0 = x b 1 0 0 0 1 bx y 1 = x * y* 1 为变换矩阵。 29 二、组合变换 在图形的几何变换中,图形的实际变换往往不是单独 采用前述的各种基本变换就可以完成,通常需要将各种基 本变换组合使用,以完成最终的图形变换。这种由多种基 本变换组合而成的变换称为组合变换,相应的变换矩阵叫 做组合变换矩阵。 假设已知点P依次经过T1、T2和T3三个几何变换,得 到的结果为: P* = ((PT1)T2)T3 运用矩阵乘法的结合律,上式可化为: 由于矩阵不存在交换律,因此矩 P* = P(T1阵相乘的顺序是不能随意互换的。 T2T3) 于是得到组合变换的变换矩阵为: T = T1T2T3 30 组合变换顺序对图形的影响 复杂变换是通过基本变换的组合而成的,由于矩阵的 乘法不适用于交换律,即: [A][B] ≠[B][A] 因此,组合的顺序一般是不能颠倒的,顺序不同,则 变换的结果亦不同,如图所示。 31 实例: 绕任意点的旋转变换 平面图形绕任意点P(xp,yp)逆时针旋转 角,需 要通过如下几个步骤来实现: (1)将旋转中心平移到坐标原点,变换矩阵为 1 1 0 x p 0 1 yp 0 0 1 (2)将图形绕坐标原点逆时针旋转 角,变换矩阵为 cos 2 sin 0 sin cos 0 0 0 1 32 (3)将旋转中心平移回到原来位置,变换矩阵为 1 3 0 x p 0 1 yp 0 0 1 (4)最后得出绕任意点P的旋转矩阵为 1 1 2 3 0 x p 即 0 1 yp 0 0 1 cos sin 0 cos sin x (1 cos ) y sin p p 1 0 1 cos 0 x p y p 0 当xp = 0,yp = 0 时,即为对原点的 sin 旋转变换矩阵。 cos sin 0 0 1 0 0 1 0 0 x p sin y ( 1 p 1 cos ) 33 例3:将下图所示图形绕自身对称轴上的一点P(15,12) 逆时针旋转90度,放大2倍(x、y方向的放大倍 数相同) 1、试写出各变换的变换矩阵; 2、求出复合变换矩阵; 3、求出各点变换后的坐标; Y A(15,20) B(10,15) E(20,15) P(15,12) C(10,5) D(20,5) X 34 解: (1)、各变换矩阵为: • 先将P点平移至原点的矩阵 : 1 T1 0 x 0 1 y0 • 绕原点逆时针旋转 cos T 2 sin 0 0 1 0 0 1 15 0 90 0 1 12 0 0 1 : sin cos 0 0 0 0 0 1 1 0 1 0 0 0 0 1 35 • 沿x、y轴放大2倍 2 T3 0 0 0 2 0 0 0 1 • 平移回原位置: 1 T4 0 x 0 0 1 y0 0 1 0 0 1 15 0 1 12 0 0 1 36 (2)、组合变换矩阵: 1 T T1 T 2 T 3 T 4 0 15 0 1 12 0 0 0 1 1 0 1 0 0 0 2 0 0 1 0 0 1 0 0 1 15 0 2 0 0 1 12 0 0 0 2 1 39 2 0 18 0 0 1 (3)、变换后的坐标为: x A x B x C xD x E y A y B y C y D y E 1 x A 1 x B 1 x C 1 x D 1 x E yA yB yC yD yE 1 15 1 10 1 10 1 20 1 20 20 15 5 5 15 1 1 0 1 2 1 39 1 2 0 18 1 0 9 0 29 1 29 9 12 2 2 22 22 1 1 1 1 1 37 作业: 1、将下图所示图形绕自身中心点P(20,20)先缩小 1/2(x、y方向的缩小倍数相同)再顺时针旋转270度, (1)试写出各变换的变换矩阵; (2)求出组合变换矩阵; (3)求出各点变换后的坐标。 A (10,20) B (30,20) P (20,20) 38 2、如图所示平行四边形ABCD,已知图上一点G(10, 6),该平行四边形先绕G点逆时针转90度,最后 沿Y方向正向移动3个单位距离。 (1)试写出各变换的变换矩阵; (2)求出组合变换矩阵; (3)求出A、B、C、D各点变换后的坐标。 y D (5,10) C(15,10) G (10,6) B(16,3) A(5,3) x Í ¼4 -1 39 1、解: (1)、各变换矩阵为: ①、先将P点平移至原点的矩阵 : 1 T1 0 x 0 0 1 y0 0 1 0 0 1 20 、沿x、y轴缩小1/2倍: T3 1 2 0 0 0 1 20 0 1 2 0 0 0 1 0 0 1 ③、绕原点顺时针旋转 270 0 cos T 2 sin 0 sin cos 0 0 0 0 1 1 0 1 0 0 0 0 1 40 ④、平移回原位置: 1 T4 0 x 0 0 1 0 0 1 20 0 1 y0 0 0 1 0 1 20 (2)、复合变换矩阵: 1 T T1T 2T3T 4 0 20 0 1 20 1 0 2 0 0 1 0 0 1 2 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 20 0 1 20 0 0 1 0 2 1 30 1 2 0 10 0 0 1 (3)、变换后的坐标为: x'A x' B x 'C x 'D x' E x ' F y 'A y 'B y 'C y 'D y 'E y 'F 1 x A 1 x B 1 x C 1 x D 1 x E 1 x F yA yB yC yD yE yF 1 15 1 25 1 30 1 25 1 15 1 10 28 . 66 28 . 66 20 11 . 34 11 . 34 20 1 1 0 1 1 1 2 30 1 1 1 2 0 10 15 . 67 0 15 . 67 20 0 24 . 33 1 24 . 33 20 17 . 5 22 . 5 25 22 . 5 17 . 5 15 1 1 1 1 1 1 41 2、解:(1) 1)先将G点平移到坐标原点,变换矩阵为 T 1 1 0 10 0 1 6 0 0 1 2)绕原点顺时针旋转90度的变换距阵为 T 2 cos sin 0 sin cos 0 0 0 0 1 1 0 1 0 0 0 0 1 3)沿Y正向平移3个单位的变换矩阵为 T 3 1 0 0 0 1 3 0 0 1 42 4)将G点移回原处的变换矩阵为 T 4 1 0 10 0 1 6 0 0 1 (2)组合变换矩阵为 T T 1T (3) 5 16 15 5 3 3 10 10 2 T T 3 1 5 1 16 T 15 1 1 5 4 0 1 16 3 3 10 10 0 0 1 1 0 1 1 0 1 1 1 16 1 1 0 1 13 0 13 0 6 1 6 4 15 14 A(13,4) B(13,15) C(6,14) D(6,4) 4 1 1 1 1 43