第3章 CHAPTER 3 图形的几何变换 在图形设计与构造中,图形的二维和三维几何变换有着广泛的应用。应用于图形的几何描述并改变它的位置、方向或大小的操作称为图形的几何变换。几何变换主要包括平移、旋转、缩放、对称及错切等操作。一般有两个方法可以对图形进行几何变换: 一种是变换矩阵作用到图形的每个点从而产生图形变换; 另一种是变换矩阵作用到图形一系列顶点或关键点,通过几何变换得到新的顶点或关键点序列,从而得到变换后的图形。因此,我们都以点的形式研究图形的几何变换。 本章要点: 本章重点掌握二维基本几何变换、三维平移变换、关于坐标轴的三维旋转变换和三维缩放变换。了解关于任意轴的三维旋转过程。 3.1几何变换的数学基础 1. 矢量运算 矢量为有向线段,有方向和大小。设有两个矢量V1(x1,y1,z1),V2(x2,y2,z2)。 (1) 矢量的长度为 |V1|=x21+y21+z21 (2) 数乘矢量为 aV1=(ax1,ay1,az1) (3) 两矢量之和为 V1+V1=(x1+x2,y1+y2,z1+z2) (4) 两矢量的点积为 V1·V2=|V1||V2|cosθ=x1·x2+y1·y2+z1·z2 θ为两向量之间的夹角。 另外,点积满足交换律和分配律: V1·V2=V2·V1 V1·(V2+V3)=V1·V2+V1·V3 (5) 两矢量的叉积为 V1×V2= ijk x1y1z1 x2y2z2=(y1·z2-y2·z1,z1·x2-z2·x1,x1·y2-x2·y1) 叉积满足反交换律和分配律: V1×V2=-V2×V1 V1×(V2+V3)=V1×V2+V1×V3 2. 矩阵运算 假设一个m行、n列矩阵A: Amn= a11a12…a1n a21a22…a2n  am1am2…amn 1) 矩阵加法运算 假设两个矩阵A和B都是m行、n列,把其对应位置元素相加而得到的矩阵叫作矩阵A、B的和,记为A+B。 A+B= a11+b11a12+b12…a1n+b1n a21+b21a22+b22…a2n+b2n  am1+bm1am2+bm2…amn+bmn 只有在两个矩阵行和列的数目都相同时才能做加法运算。 2) 数乘矩阵 用数k乘矩阵A每一个元素而得的矩阵叫作k与A之积,记为kA。 kA= ka11ka12…ka1n ka21ka22…ka2n  kam1kam2…kamn 3) 矩阵乘法运算 只有前矩阵的列数等于后矩阵的行数时,两个矩阵才能相乘。 Cmn=Amp·Bpn,矩阵C中的每个元素cij为 cij=∑pk=1aik·bkj 如A为2×3的矩阵,B为3×2的矩阵,两者的乘积为 C=AB= a11a12a13 a21a22a23 b11b12 b21b22 b31b32 =a11b11+a12b21+a13b31a11b12+a12b22+a13b32a21b11+a22b21+a23b31a21b12+a22b22+a23b32 4) 单位矩阵 对于n×n的矩阵,如果其对角线上的各个元素均为1,其余的元素都为0,则该矩阵称为单位矩阵,记为In。对于任意m×n矩阵恒有 AmnIn=Amn ImAmn=Amn 5) 矩阵的转置 交换一个矩阵Am×n所有行列的元素,所得到的n×m矩阵称为原有矩阵的转置,记为AT。 AT= a11a21…am1 a12a22…am2  a1na2n…amn 可得(AT)T=A,(A+B)T=(AT+BT),(kA)T=kAT。 矩阵积的转置为(AB)T=BTAT。 6) 矩阵的逆 对于m×n的方阵A,如果存在m×n的方阵B,使得AB=BA=In,则称B是A的逆,记为B=A-1,A被称为非奇异矩阵。矩阵的逆是相互的,A也可记为A=B-1,B也是一个非奇异矩阵。任何非奇异矩阵有且只有一个逆矩阵。 7) 矩阵运算的基本性质 矩阵的加法满足交换律与结合律: (A+B)=(B+A) A+(B+C)=(A+B)+C 数乘的矩阵满足分配律与结合律: a(A+B)=aA+aB a(AB)=(aA)B=A(aB) 矩阵的乘法满足结合律: A(BC)=(AB)C 矩阵的乘法对加法满足分配律: (A+B)C=AC+BC C(A+B)=CA+CB 但矩阵的乘法不满足交换律: AB≠BA 3.2二维基本几何变换 3.2.1平移、缩放、旋转变换 1. 平移变换 将一个点的坐标增加位移量得到新的坐标,称为平移变换。假设x、y两个方向的平移量分别为tx,ty,将原来点的坐标p(x,y)增加该平移量变为新坐标p′(x′,y′),则平移变换的等式形式为 x′=x+tx y′=y+ty 变换矩阵为 x′y′=txty+xy 或写成 P′=P+T 其中: P=xy,P′=x′y′,T=txty 将一个三角形进行平移变换得到的图形如图31所示。 2. 旋转变换 二维旋转是将一个对象绕与xy平面垂直的旋转轴进行旋转,旋转轴与xy平面的交点称为基准点。 如图32所示,坐标点p(x,y)以坐标原点为基准点,逆时针旋转θ角,变换为新的坐标点p′(x′,y′)。 图31平移变换示例 图32相对原点将点p旋转得到p′ 注意: 旋转角度是分正负的,正角度θ定义为绕基准点逆时针旋转; 而负角度定义为绕基准点顺时针旋转。 推导过程如下。 变换前点p(x,y)的两个坐标可分别表示为 x=rcosα y=rsinα 变换后点p′(x′,y′)的两个坐标可分别表示为 x′=rcos(α+θ)=rcosαcosθ-rsinαsinθ y′=rsin(α+θ)=rsinαcosθ+rcosαsinθ 从而得到旋转变换的等式形式为 x′=xcosθ-ysinθ y′=xsinθ+ycosθ 由等式形式得到变换矩阵为 x′y′=cosθ-sinθ sinθcosθ xy 或写成 P′=RP 其中: P=xy,P′=x′y′,R=cosθ-sinθ sinθcosθ 如果顺时针旋转角度为θ,此时θ代入负值即可。 将△ABC以坐标原点为基准点进行旋转得到的结果如图33所示。 3. 缩放变换 假设缩放系数为sx和sy,两缩放系数分别与原来点p(x,y)两方向坐标相乘得到新的坐标p′(x′,y′),从而缩放变换等式形式为 x′=sx·x y′=sy·y 变换矩阵为 x′y′=sx00syxy 或写成 P′=SP 其中: P′=x′y′,S=sx00sy,P=xy 在缩放体系中,有一个缩放变换后不改变位置的点称为固定点。在此缩放中,固定点为坐标原点。不过,固定点可以被选择在任何位置,在3.2.2节中再加以描述。 缩放系数sx和sy可以取任何正数值。值大于1将放大对象的尺寸,值小于1将缩小对象的尺寸。当sx和sy取值相同时,x和y两方向保持相对比例不变,称为一致缩放; 否则,称为差值缩放。 将△ABC以固定点为坐标原点进行缩放变换,如图34所示。 图33将△ABC以坐标原点为基准点 旋转θ所得结果 图34以固定点为坐标原点的缩放 变换示意图 4. 齐次坐标表示 从平移、缩放、旋转矩阵变换可以看到: 平移是加法运算,而缩放、旋转是乘法运算,变换矩阵的形式不统一,无法形成几何变换的模板式运算,也更难进行复合变换。为了使变换矩阵的形式统一,引入齐次坐标。 如果将二维矩阵表示形式扩展为三维矩阵表示形式,将变换矩阵的第三列用于平移项,则所有的变换公式可表达为矩阵乘法。将二维坐标表示(x,y)扩充到三维坐标表示(xh,yh,h)。(xh,yh,h)称为齐次坐标,这里的齐次系数h是一个非零值,因此 x=xhh,y=yhh 这样,二维齐次坐标表示为(h×x,h×y,h)。对于二维几何变换,可以把齐次系数h取为非零值。对于每个坐标点(x,y),可以有无数个等价的齐次表达式。最方便的选择是简单地将齐次系数h设置成1。因此每个二维坐标位置都可用齐次坐标(x,y,1)来表示。 利用齐次坐标表示坐标点位置,我们就可以用矩阵相乘的形式来统一所有的几何变换。二维坐标点用三维列向量表示,二维变换矩阵用一个3×3的矩阵表示。 5. 齐次坐标下几何变换的矩阵表示 1) 二维平移变换的矩阵表示 齐次坐标下二维平移变换矩阵的形式为 x′y′1= 10tx 01ty 001xy1= x+txy+ty1=T(tx,ty)xy1 其中,平移矩阵T(tx,ty)为 T(tx,ty)=10tx01ty001 2) 二维旋转变换的矩阵表示 齐次坐标下以坐标原点为中心且旋转角度为θ的二维旋转变换矩阵形式为 x′y′1= cosθ-sinθ0 sinθcosθ0 001xy1= xcosθ-ysinθ xsinθ+ycosθ 1 =R(θ)xy1 其中,旋转矩阵R(θ)为 R(θ)=cosθ-sinθ0 sinθcosθ0001 3) 二维缩放变换的矩阵表示 齐次坐标下固定点为坐标原点且缩放系数为sx和sy的二维缩放变换矩阵形式为 x′y′1= sx00 0sy0 001xy1=sx·xsy·y1=S(sx,sy)xy1 其中,缩放矩阵S(sx,sy)为 S(sx,sy)=sx00 0sy0 001 6. 逆变换 1) 逆平移变换 通过对平移距离取负值可得到平移变换的逆矩阵。假设两平移距离为tx,ty,则其逆平移矩阵为 T-1(tx,ty)= 10-tx 01-ty 001 逆平移是与原平移变换方向相反的平移,因此,平移矩阵和其逆平移矩阵的乘积是一个单位矩阵。 2) 逆旋转变换 通过对旋转角度取负值可得到旋转变换的逆矩阵。坐标原点为基准点、旋转角度为θ的旋转变换,其逆旋转矩阵为 R-1(θ)= cos(-θ)-sin(-θ)0 sin(-θ)cos(-θ)0 001= cosθsinθ0 -sinθcosθ0 001 相同角度θ绕着逆时针和顺时针分别形成两个互逆矩阵,因此,旋转矩阵和其逆旋转矩阵的乘积是一个单位矩阵。 3) 逆缩放变换 将缩放系数取其倒数形成缩放变换的逆矩阵。因此,固定点为坐标原点且缩放系数sx和sy的二维缩放变换的逆矩阵可表示为 S-1(sx,sy)= 1sx00 01sy0 001 缩放矩阵和其逆矩阵的乘积也是一个单位矩阵。 3.2.2复合变换 我们对点位置P进行两次变换,因为矩阵乘积具有结合率,可知变换后的坐标点为 P′=M2M1P=(M2M1)P 令 M=M2M1 则有 P′=MP M即为复合变换矩阵。两次变换如此,三次或以上次变换也类似。 常见的复合几何变换如下。 1. 复合二维平移 如果将两个连续的平移向量(t1x,t1y)和(t2x,t2y)施加于坐标点P,变换后坐标点P′为 P′=T(t2x,t2y){T(t1x,t1y)P} ={T(t2x,t2y)T(t1x,t1y)}P 其中,P和P′均为齐次坐标列向量。两个平移变换的矩阵相乘为 00t2x 00t2y 001 00t1x 00t1y 001= 00t2x+t1x 00t2y+t1y 001 或 T(t2x,t2y)T(t1x,t1y)=T(t2x+t1x,t2y+t1y) 从而得出: 对同一点做两次平移变换相当于两次平移分量之和作为平移分量的一次平移变换。 2. 复合二维旋转 如果将两个连续的旋转角度θ1和θ2施加于坐标点P,那么变换后的坐标P′为 P′=R(θ2){R(θ1)P} ={R(θ2)R(θ1)}P 其中,P和P′均为齐次坐标列向量。两个旋转变换的矩阵相乘为 cosθ2-sinθ20 sinθ2cosθ20 001 cosθ1-sinθ10 sinθ1cosθ10 001= cos(θ2+θ1)-sin(θ2+θ1)0 sin(θ2+θ1)cos(θ2+θ1)0 001 或 R(θ2)R(θ1)=R(θ2+θ1) 从而得出: 对同一点做两次旋转变换相当于两次的旋转角度之和作为旋转角度的一次旋转变换。 3. 复合二维缩放 如果将两个连续缩放变换作用于坐标点P,变换后坐标点P′为 P′=S(s2x,s2y){S(s1x,s1y)P} ={S(s2x,s2y)S(s1x,s1y)}P 其中,P和P′均为齐次坐标列向量。两个缩放变换的矩阵相乘为 s2x00 0s2y0 001 s1x00 0s1y0 001= s2x·s1x00 0s2y·s1y0 001 或 S(s2x,s2y)S(s1x,s1y)=S(s2x·s1x,s2y·s1y) 从而得出: 对同一点做两次缩放变换相当于两次的缩放系数之积作为缩放系数的一次缩放变换。 4. 二维基准点为M(xr,yr)的旋转变换 前面所学习的旋转变换是基准点为坐标原点的旋转变换。如果基准点为任意一点M(xr,yr),可以通过下面3个步骤的复合变换得到。 步骤1平移变换使基准点M(xr,yr)回到坐标原点,两方向的平移分量分别为-xr和-yr。变换点p(x0,y0)通过同样的平移分量变换到(x1,y1),平移矩阵变换为 x1y11=T(tx,ty)x0y01 其中: T(tx,ty)= 00-xr 00-yr 001 步骤2以基准点为坐标原点进行旋转变换,变换矩阵为 x2y21=R(θ)x1y11 其中: R(θ)= cosθ-sinθ0 sinθcosθ0 001 步骤3将基准点平移回原来的位置(xr,yr)。x方向的平移分量xr、y方向的平移分量yr,即步骤1中平移变换的逆变换: x3y31=T-1(tx,ty)x2y21 其中: T-1(tx,ty)= 00xr 00yr 001 应用复合变换表示为 x3y31= 00xr 00yr 001 cosθ-sinθ0 sinθcosθ0 001 00-xr 00-yr 001x1y11 = cosθ-sinθxr(1-cosθ)+yrsinθ sinθcosθyr(1-cosθ)-xrsinθ 001x1y11 如图35所示,其中图35(a)中的三角形和基准点(xr,yr)都在原始位置; 图35(b)中平移变换使基准点(xr,yr)回到坐标原点位置,三角形各点也随之平移相同的平移分量; 图35(c)绕坐标原点旋转三角形; 图35(d)逆平移变换使基准点回到(xr,yr)所在的原始位置,就得到变换后的三角形。 图35基准点为(xr,yr)的旋转变换 5. 二维固定点为M(xf,yf)的缩放变换 前面所学的缩放变换是固定点为坐标原点的缩放变换。如果固定点为任意点M(xf,yf),可以通过下面3个步骤的复合变换得到。 步骤1平移变换使固定点M(xf,yf)回到坐标原点处,两方向的平移分量分别为-xf和-yf。变换点p(x0,y0)通过同样的平移分量变换到(x1,y1),平移矩阵变换为 x1y11=T(tx,ty)x0y01 其中: T(tx,ty)= 00-xf 00-yf 001 步骤2以固定点为坐标原点进行缩放变换,缩放矩阵变换为 x2y21=S(sx,sy)x1y11 其中: S(sx,sy)= sx00 0sy0 001 步骤3最后将固定点平移回原来的位置(xf,yf),x方向的平移分量为xf,y方向的平移分量为yf,即步骤1中平移变换的逆变换: x3y31=T-1(tx,ty)x2y21 其中: T-1(tx,ty)= 00xf 00yf 001 应用复合变换表示为 x3y31= 00xf 00yf 001 sx00 0sy0 001 00-xf 00-yf 001x0 y0 1 = sx0xf(1-sx) 0syyf(1-sy) 001x0y01 如图36所示,其中图36(a)中的三角形和固定点(xf,yf)都在原始位置; 图36(b)平移变换使固定点(xf,yf)回到坐标原点位置,三角形各点也随之平移相同的平移分量; 图36(c)绕坐标原点进行缩放; 图36(d)逆平移使固定点回到(xf,yf)所在的原始位置,就得到变换后的三角形。 图36固定点为(xf,yf)的缩放变换 3.2.3对称变换 对称变换又称为镜像变换。对于二维对称操作可将图形绕对称轴旋转180°而成,下面列举几个常见对称轴的对称变换。 (1) 坐标点(x,y)关于y=0即x轴作对称变换得到新的坐标(x′,y′),等式形式为 x′=x y′=-y 变换矩阵为 x′y′1= 100 0-10 001xy1 这种对称变换保持x坐标不变,y坐标取相反值。将△ABC关于x轴作对称变换,如图37所示。 (2) 坐标点(x,y)关于x=0即y轴作对称变换得到新的坐标(x′,y′),等式形式为 x′=-x y′=y 变换矩阵为 x′y′1= -100 010 001xy1 这种对称变换保持y坐标不变,x坐标取相反值。将△ABC关于y轴作对称变换,如图38所示。 图37△ABC关于x轴的对称变换 图38△ABC关于y轴的对称变换 (3) 坐标点(x,y)关于坐标原点作对称变换得到新的坐标(x′,y′),等式形式为 x′=-x y′=-y 变换矩阵为 x′y′1= -100 0-10 001xy1 这种对称变换x坐标值和y坐标值同时取相反值。将△ABC关于坐标原点作对称变换,如图39所示。 (4) 坐标点(x,y)关于直线y=x作对称变换得到新的坐标(x′,y′),等式形式为 x′=y y′=x 变换矩阵为 x′y′1= 010100001xy1 将△ABC关于y=x轴作对称变换,如图310所示。 图39△ABC关于坐标原点 的对称变换 图310△ABC关于y=x轴的 对称变换 (5) 坐标点(x,y)关于直线y=-x作对称变换得到新的坐标(x′,y′),等式形式为 x′=-y y′=-x 变换矩阵为 x′y′1= 0-10 -100 001xy1 将△ABC关于y=-x轴作对称变换,如图311所示。 图311△ABC关于y=-x 轴的对称变换 (6) 坐标点(x,y)关于任意直线y=mx+b的对称变换。 可以通过复合变换完成这种对称变换。具体操作: 先平移对称轴y=mx+b使其过原点,然后旋转对称轴使其成为某个坐标轴,再关于该坐标轴作对称变换,最后逆旋转和逆平移使对称轴回到原来的位置,这样就可以得到坐标点(x,y)关于任意直线y=mx+b的对称点(x′,y′)。由于平移时可以沿x方向或y方向平移,而旋转也可以沿逆时针或顺时针旋转成为某个坐标轴,因此变换矩阵并不唯一。 从对称轴y=mx+b的直线方程可知: 直线在y轴上的截矩为b,在x轴上的截矩为-bm。假设直线的正切角为α,则α=arctg(m),α余角设为β=90°-α。那么正常描述坐标点(x,y)关于任意直线y=mx+b的对称变换可分以下4种情况。 第一种情况: 沿y方向作平移变换使对称轴过原点,逆时针旋转β角度使其成为y轴,再关于y轴作对称,最后作相应逆旋转变换和逆平移变换使对称轴回到原来的位置。从而得到最后的变换点坐标。对应的复合变换矩阵为 x′y′1= 10001b001 cosβsinβ0 -sinβcosβ0 001 -100 010 001 cosβ-sinβ0 sinβcosβ0 001 100 01-b 001xy1 如图312所示。 图312关于任意直线y=mx+b的对称变换过程 第二种情况: 沿x方向作平移变换使对称轴过原点,顺时针旋转α角度使其成为x轴,再关于x轴作对称变换,最后作逆旋转变换和逆平移变换使对称轴回到原来的位置。对应的变换矩阵为 x′y′1= 10-bm 010 001 cosα-sinα0 sinαcosα0 001 100 0-10 001 cosαsinα0 -sinαcosα0 001 10bm 010 001xy1 后两种情况通过两方向的平移变换与两方向的旋转变换交叉组合就可得出,但注意旋转使对称轴成为某个轴时,对称矩阵就必须只关于该轴对称。 3.2.4错切变换 错切变换是一种使图形形状发生变化的变换,经过错切变换的图形就好像内部夹层发生滑动而组成的新图形。下面介绍两种简单的沿着x方向的错切变换和沿着y方向的错切变换。 1. 简单的沿x方向的错切变换 这种错切变换保持y值不变,而x值产生与y值成正比的平移量。 变换等式为 x′=x+shx·y y′=y 其中,shx可为任意实数,称为错切参数。shx为正值时坐标点向右移动,shx为负值时坐标点向左移动。 变换矩阵为 x′y′1= 1shx0010001xy1 如图313所示。 在图313中,可以看出: 错切参数shx=Δxy 。 2. 简单的沿y方向的错切变换 这种错切变换保持x值不变,而y值产生同x值成正比的平移量。 变换等式为 x′=x y′=y+shy·x 变换矩阵为 x′y′1= 100shy10001xy1 如图314所示。 图313简单的沿x方向的错切变换 图314简单的沿y方向的错切变换 在图314中,可以看出: 错切参数shy=Δyx。 3.3三维基本几何变换 三维几何变换是在二维几何变换的基础上考虑z坐标而得到的。三维平移变换与三维缩放变换只是在二维相应几何变换基础上多了z分量。而三维旋转变换比较复杂: 在xy平面上的二维旋转只考虑沿着垂直于xy平面的坐标轴进行旋转,也就是绕一个基准点旋转; 而三维空间中可以绕任意方向的旋转轴进行旋转,往往可以通过绕某个坐标轴进行复合变换得到,因此关于坐标轴的旋转最为关键。 一个三维位置在齐次坐标中表示为四元列向量,每一个几何变换操作是依次左乘坐标向量为4×4的变换矩阵。 3.3.1三维平移变换 将平移距离tx,ty,tz加到原来的坐标(x,y,z)上变换为新的坐标(x′,y′,z′),平移变换等式形式为 x′=x+tx y′=y+ty z′=z+tz 变换矩阵为 x′y′z′1= 100tx 010ty 001tz 0001xyz1 或 P′=TP 其中,平移矩阵T为 T= 100tx 010ty 001tz 0001 如图315所示。 图315平移变换 3.3.2三维旋转变换 一般任意旋转轴的旋转往往可以通过围绕坐标轴的旋转并结合适当的平移变换的复合而得到。因此我们首先讨论绕三个坐标轴的旋转。 1. 绕z轴的三维旋转变换 任意点绕z轴三维旋转形成一个与z轴垂直的旋转平面,z坐标在该变换中保持不变,而x、y坐标在旋转平面中的旋转变换相当于基准点为坐标原点的二维旋转。变换等式为 x′=xcosθ-ysinθ y′=xsinθ+ycosθ z′=z 齐次变换矩阵为 x′y′z′1= cosθ-sinθ00 sinθcosθ00 0010 0001xyz1 或写成 P′=RzP 其中,绕z轴三维旋转矩阵Rz为 Rz= cosθ-sinθ00 sinθcosθ00 0010 0001 如图316所示。 图316绕z轴的三维旋转 2. 绕y轴的三维旋转变换 由于三个坐标轴是对等关系,对1中的等式作坐标参数x、y、z的循环替换: z→y,y→x,x→z,根据该方式的轮换,可得等式形式为 x′=zcosθ-xsinθ y′=zsinθ+xcosθ y′=y 齐次变换矩阵为 x′y′z′1= cosθ0sinθ0 0100 -sinθ0cosθ0 0001xyz1 或写成 P′=RyP 其中,绕y轴的三维旋转矩阵Ry为 Ry= cosθ0sinθ0 0100 -sinθ0cosθ0 0001 坐标轴轮换如图317所示。 图317由绕z轴旋转经过循环坐标替换生成绕y轴旋转 3. 绕x轴的三维旋转变换 对1中等式作坐标参数x、y、z的循环替换: z→x,x→y,y→z,根据该方式的轮换,可得等式形式为 y′=ycosθ-zsinθ z′=ysinθ+zcosθ x′=x 齐次变换矩阵为 x′y′z′1= 1000 0cosθ-sinθ0 0sinθcosθ0 0001xyz1 或写成 P′=RxP 其中,绕x轴的三维旋转矩阵Rx为 Rx=1000 0cosθ-sinθ0 0sinθcosθ0 0001 坐标轴轮换如图318所示。 图318由绕z轴旋转经过循环坐标替换生成绕x轴旋转 4. 绕任意轴的一般三维旋转 如果旋转轴不是坐标轴,而是一条任意轴,可以应用关于坐标轴旋转和平移所形成的复合变换得到图形。假设任意轴由两个坐标点P1和P2确定。如果沿着从P2到P1的轴进行观察,并且旋转的方向为逆时针方向,旋转角度为θ,则轴向量的齐次坐标可以定义为 V=P2-P1= x2-x1 y2-y1 z2-z1 1 同时,沿旋转轴的单位向量的齐次坐标u定义为 u=V|V|=abc1 其中,分量a,b,c是旋转轴的方向余弦: a=x2-x1|V| ,b=y2-y1|V|,c=z2-z1|V| 可以将旋转轴变换到任意一个坐标轴,下面以z轴为例来讨论其变换序列。 操作步骤如下: ① 平移对象,使旋转轴的一个点P1与坐标原点重合; ② 旋转对象使旋转轴与某一个坐标轴重合,如z轴; ③ 绕坐标轴完成指定的旋转; ④ 利用逆旋转变换使旋转轴回到其原始方向; ⑤ 利用逆平移变换使旋转轴回到原始位置。 如图319所示。 图319绕任意轴旋转时,将旋转轴变换成z轴的5个步骤 具体实现过程如下。 (1) 选择将P1点平移回到坐标原点,P1点的三维坐标为(x1,y1,z1),该平移变换矩阵为 T(-x1,-y1,-z1)= 100-x1 010-y1 001-z1 0001 (2) 使旋转轴与z轴重合的变换可以通过两次坐标轴旋转完成。 实现方法并不唯一,可以通过先绕x轴旋转,将向量u变换到xOz平面上,设旋转矩阵为Rx(α); 再绕y轴旋转,将向量u变换到z轴,设旋转矩阵为Ry( β )。图320和图321给出了向量u的两次旋转。由于旋转计算包括正弦函数和余弦函数,可以通过标准的向量运算来得到这两个旋转矩阵的元素。向量的点积运算可以确定余弦项,向量的叉积运算可以确定正弦项。 ① 求Rx(α)的参数,如图320所示。 旋转角α是旋转轴u在yOz平面的投影u′=(0,b,c)与z轴的夹角。旋转角度α的余弦可以由u′和z轴上单位向量uz的点积得到 cosα=u′·uz|u′||uz|=cd 其中,d是u′的模: d=b2+c2 同样,可以利用u′和uz的叉积得到α的正弦。u′和uz叉积形式为 u′×uz=ux|u′||uz|sinα 并且u′和uz叉积的笛卡儿形式为 u′×uz=ux·b 联立两种叉积形式的等式右边可得 ux|u′||uz|sinα=ux·b 另外有 |u′|=d,|uz|=1 得出 sinα=bd 最后将计算出来的cosα和sinα代入绕x轴旋转的矩阵,即可得到将旋转轴p1p2旋转到xOz平面的旋转矩阵Rx(α)。 Rx(α)= 1000 0cd-bd0 0bdcd0 0001 ② 求Ry( β )的参数,如图321所示。 图320求旋转变换Rx(α)的参数 图321求旋转变换Ry( β )的参数 经过Rx(α)变换,p2已落入xOz平面,但p2点与x轴的距离保持不变。因此,p1p2现在的单位矢量u″的z方向的分量的值即为u′的长度,该值等于d。也就是u″=(a,0,d)。设β是u″与uz的夹角。 u″的模|u″|为 |u″|=a2+d2=a2+b2+c2=1 单位向量uz的模|uz|=1。 所以: cosβ=u″·uz|u″||uz|=d 比较叉积与坐标无关的形式: u″×uz=uy|u″||uz|sinβ u″和uz叉积的笛卡儿形式为 u″×uz=uy·(-a) 所以: sinβ=-a 最后将计算出来的cosβ和sinβ代入绕y轴旋转的矩阵,即可得到将旋转轴p1p2旋转到z轴的旋转矩阵Ry(β): Ry(β)= d0-a0 0100 a0d0 0001 (3) 将旋转轴与z轴重合后,作对象关于z轴旋转θ角的旋转变换,最后分别进行Ry(β)的逆变换、Rx(α) 的逆变换和T(-x1,-y1,-z1)的逆变换得到最终结果。 关于z轴旋转θ角的旋转变换矩阵为 Rz(θ)= cosθ-sinθ00 sinθcosθ00 0000 0001 Ry(β)的逆变换矩阵为 R-1y(β)= d0a0 0100 -a0d0 0001 Rx(α) 的逆变换矩阵为 R-1x(α)= 1000 0cdbd0 0-bdcd0 0001 T(-x1,-y1,-z1) 的逆变换矩阵为 T-1(-x1,-y1,-z1)= 100x1 010y1 001z1 0001 最终,可得绕任意轴p1p2旋转θ角的旋转变换的复合变换为 x′y′z′1= 100x1 010y1 001z1 0001 1000 0cdbd0 0-bdcd0 0001 d0a0 0100 -a0d0 0001 cosθ-sinθ00 sinθcosθ00 0000 0001 d0-a0 0100 a0d0 0001 1000 0cd-bd0 0bdcd0 0001 100-x1 010-y1 001-z1 0001xyz1 复合变换R(θ)可简写为 R(θ)=T-1R-1x(α)R-1y(β)Rz(θ)Ry(β)Rx(α)T 3.3.3三维缩放变换 1. 以固定点为坐标原点的三维缩放 点p(x、y、z)关于坐标原点的三维缩放只是在二维缩放基础上增加z坐标的缩放参数即可,因此缩放系数为sx,sy,sz的三维缩放的等式形式为 x′=sx·x y′=sy·y z′=sz·z 对应的变换矩阵为x′y′z′1= sx000 0sy00 00sz0 0001xyz1 如图322所示。 图322相对于坐标原点的缩放变换 2. 以固定点为任意点的三维缩放 如果固定点为任意点(xf,yf,zf),可以通过下面3个步骤的复合变换得到,如图323所示。 图323以任意固定点进行缩放变换 步骤1先做平移变换使固定点(xf,yf,zf)回到坐标原点处,那么图形上的任意一点(x0,y0,z0)可以通过x方向的平移分量为-xf、y方向的平移分量为-yf、z方向的平移分量为-zf的平移变换变换到(x1,y1,z1),平移变换的矩阵为 x1y1z11=T(tx,ty,tz)x0y0z01 其中: T(tx,ty,tz)= 000-xf 000-yf 000-zf 0001 步骤2以固定点为坐标原点进行缩放变换,缩放变换的矩阵为 x2y2z21=S(sx,sy,sz)x1y1z11 其中: S(sx,sy,sz)= sx000 0sy00 00sz0 0001 步骤3将固定点移回原来的位置(xf,yf,zf),则x方向的平移分量为xf、y方向的平移分量为yf,z方向的平移分量为zf。变换点也随之增加相同的分量,即可得到最终结果。 步骤1中平移变换的逆变换为 x3y3z31=T-1(tx,ty,tz) x2y2z21 其中: T-1(tx,ty,tz)= 000xf 000yf 000zf 0001 复合变换表示为 x3y3z31= 000xf 000yf 000zf 0001 sx000 0sy00 00sz0 0001 000-xf 000-yf 000-zf 0001x0y0z01 = sx00(1-sx)xf 0sy0(1-sy)yf 00sz(1-sz)zf 0001x0y0z01 复合变换的矩阵表示为 T(xf,yf,zf)S(sx,sy,sz)T(- xf,-yf,-zf)= sx00(1-sx)xf 0sy0(1-sy)yf 00sz(1-sz)zf 0001 3.4本章小结 本章主要介绍了二、三维几何变换。在几何变换的讨论中,分别介绍了二维平移、旋转、缩放、对称、错切变换与三维平移、旋转、缩放变换的等式与矩阵。通过几何变换可以将场景中的物体在适当的位置并以适当的尺寸予以显示。 3.5习题 1. 如下图,求△ABC绕A点逆时针旋转45°所形成的新的三角形。 2. 如下图,求△ABC以固定点D,且缩放系数sx=3和sy=4作缩放变换后所形成的新的三角形。 3. 如下图,求△ABC关于直线y=2x-4作对称变换得到的△A′B′C′。 4. 描述基准点为任意点的二维旋转变换的操作步骤。 5. 分别写出平移逆矩阵、旋转逆矩阵和缩放逆矩阵。 6. 描述固定点为任意点的二维缩放变换的操作步骤。 7. 求关于y轴顺时针旋转p(4,5,6),旋转角度为30°的点p′。 8. 描述固定点为任意点的三维缩放的操作步骤。 9. 写出绕任意轴p1p2旋转θ角的旋转变换的复合变换矩阵。 10. 写出两种错切变换的矩阵表示。