第5章二维变换与裁剪 本章学习目标 .了解齐次坐标的概念。 .熟练掌握二维基本几何变换矩阵。 .熟练掌握Cohen-Sutherland直线段裁剪算法。 .掌握中点分割直线段裁剪算法。 .了解Liang-Barsky直线段裁剪算法。 .了解Sutherland-Hodgman多边形裁剪算法。 5.图形几何变换基础 1 通过对图形进行几何变换(geometricaltransformation), 由简单图形可以构造出复杂 图形。图5-1将一块地板砖铺设在九宫格内来展示人行道的真实铺设效果,图5-1(a)只使 用了简单的平移变换,图5-1(b)综合使用了平移变换和旋转变换。图5-2为由球类对象构 成的三维场景,描述了地球的公转和自转。 图形的几何变换是对图形进行平移变换(translationtransformation)、比例变换 (scalingtransformation)、旋转变换(rotationtransformation)、反射变换(reflection transformation)和错切变换(sheartransformation)。图形的几何变换可以分为二维图形几 何变换和三维图形几何变换,而二维图形几何变换又是三维图形几何变换的基础。 图5-1 地板砖类二维场景 图5-2 球类三维场景 5.1.1 齐次坐标 为了使图形几何变换表达为图形顶点集合矩阵与某一变换矩阵相乘的问题,引入了齐 次坐标。 所谓齐次坐标就是用n+1维向量表示n 维向量。例如,在二维平面中,点P (x,y)的 齐次坐标表示为(wx ,wy ,w )。类似地,在三维空间中,点P (x,y,z)的齐次坐标表示为 (wx ,wy ,wz ,w )。这里,w 为任意不为0的比例系数,如果w =1就是规范化的齐次坐标。 二维点P(x,y)的规范化齐次坐标为(x,y,1),三维点P(x,y,z)的规范化齐次坐标为(x, y,z,1)。 定义了规范化齐次坐标以后,图形的几何变换可以表示为图形顶点集合的齐次坐标矩 阵与某一变换矩阵相乘的形式。 5.1.2 矩阵相乘 二维图形顶点表示为规范化齐次坐标后,其图形顶点集合矩阵一般为n×3的矩阵,其 中n 为顶点数,变换矩阵为3×3的矩阵。在进行图形几何变换时需要用到线性代数里的矩 阵相乘运算。例如,对于n×3的矩阵A 和3×3的矩阵B,矩阵相乘公式为 AB = a11 a12 a13 a21 a22 a23 . . . an1 an2 an3 é . êêêêê ù . úúúúú · b11 b12 b13 b21 b22 b23 b31 b32 b33 é . êêêê ù . úúúú = a11b11 +a12b21 +a13b31 a11b12 +a12b22 +a13b32 a11b13 +a12b23 +a13b33 a21b11 +a22b21 +a23b31 a21b12 +a22b22 +a23b32 a21b13 +a22b23 +a23b33 . . . . . . . . . an1b11 +an2b21 +an3b31 an1b12 +an2b22 +an3b32 an1b13 +an2b23 +an3b33 é . êêêêê ù . úúúúú (5-1) 由线性代数知道,矩阵乘法不满足交换律,只有左矩阵的列数等于右矩阵的行数时,两 个矩阵才可以相乘。特别地,对于二维变换的两个3×3的矩阵A 和B,矩阵相乘公式为 AB = a11 a12 a13 a21 a22 a23 a31 a32 a33 é . êêêê ù . úúúú · b11 b12 b13 b21 b22 b23 b31 b32 b33 é . êêêê ù . úúúú = a11b11 +a12b21 +a13b31 a11b12 +a12b22 +a13b32 a11b13 +a12b23 +a13b33 a21b11 +a22b21 +a23b31 a21b12 +a22b22 +a23b32 a21b13 +a22b23 +a23b33 a31b11 +a32b21 +a33b31 a31b12 +a32b22 +a33b32 a31b13 +a32b23 +a33b33 é . êêêê ù . úúúú 类似地,可以处理三维变换的两个4×4矩阵相乘问题。 5.1.3 二维几何变换矩阵 用规范化齐次坐标表示的二维图形几何变换矩阵是一个3×3的方阵,简称为二维几何 变换矩阵。 ·127· T = a b p c d q l m s é . êêêê ù . úúúú (5-2) 从功能上可以把二维变换矩阵T 分为4个子矩阵。其中T1= a b c d é . êê ù . úú 是对图形进行比 例、旋转、反射和错切变换;T2=[l m ]是对图形进行平移变换;T3= p q é . êê ù . úú 是对图形进行投 影变换;T4=[s]是对图形进行整体比例变换。 5.1.4 物体变换与坐标变换 同一种变换可以看作是物体变换,也可以看作是坐标变换。物体变换是使用同一变换 矩阵作用于物体上的所有顶点,但坐标系位置不发生改变。坐标变换是坐标系发生变换,但 物体位置不发生改变,然后在新坐标系下表示物体上的所有顶点。这两种变换紧密联系,各 有各的优点,只是变换矩阵略有差异而已,以下主要介绍物体变换。 5.1.5 二维几何变换形式 二维几何变换的基本方法是把变换矩阵作为一个算子,作用到变换前的图形顶点集合 的规范化齐次坐标矩阵上,得到变换后新的图形顶点集合的规范化齐次坐标矩阵。连接变 换后的新图形顶点,就可以绘制出变换后的二维图形。 设变换前图形顶点集合的规范化齐次坐标矩阵为P= x1 y1 1 x2 y2 1 . . . xn yn 1 é . êêêêê ù . úúúúú ,变换后图形顶点 集合的规范化齐次坐标矩阵为P'= x'1 y'1 1 x'2 y'2 1 . . . x'n y'n 1 é . êêêêê ù . úúúúú,二维变换矩阵为T= a b p c d q l m s é . êêêê ù . úúúú 。则 二维几何变换公式为P'=PT,可以写成 x'1 y'1 1 x'2 y'2 1 . . . x'n y'n 1 é . êêêêê ù . úúúúú = x1 y1 1 x2 y2 1 . . . xn yn 1 é . êêêêê ù . úúúúú · a b p c d q l m s é . êêêê ù . úúúú (5-3) 5.2 二维图形基本几何变换矩阵 二维图形的基本几何变换是指相对于坐标原点和坐标轴进行的几何变换,包括平移、比 例、旋转、反射和错切5种变换。物体变换是通过变换物体上每一个顶点实现的,因此以点 的二维基本几何变换为例讲解二维图形基本几何变换矩阵。二维坐标点的基本几何变换可 以表示为P'=PT 的形式,其中,P(x,y)为变换前的二维齐次坐标点,P'(x',y')为变换后 ·128· 的二维齐次坐标点,T 为3×3的变换矩阵。 5.2.1 平移变换矩阵 平移变换是指将P(x,y)点移动到P'(x',y')位置的过程,如图5-3所示。 平移变换的坐标表示为 x'=x+Tx y'=y+Ty { 。 相应的齐次坐标矩阵表示为 [x' y' 1]=[x +Tx y +Ty 1]=[x y 1]· 1 0 0 0 1 0 Tx Ty 1 é . êêêê ù . úúúú 因此,二维平移变换矩阵 T = 1 0 0 0 1 0 Tx Ty 1 é . êêêê ù . úúúú (5-4) 式中,Tx ,Ty 为平移参数。 5.2.2 比例变换矩阵 比例变换是指P(x,y)点相对于坐标原点O,沿x 方向缩放Sx 倍,沿y 方向缩放Sy 倍,得到P'(x',y')点的过程,如图5-4所示。 图5-3 平移变换 图5-4 比例变换 比例变换的坐标表示为 x'=x·Sx y'=y·Sy { 。 相应的齐次坐标矩阵表示为 [x' y' 1]=[x·Sx y·Sy 1]=[x y 1]· Sx 0 0 0 Sy 0 0 0 1 é . êêêê ù . úúúú 因此,二维比例变换矩阵 T = Sx 0 0 0 Sy 0 0 0 1 é . êêêê ù . úúúú (5-5) ·129· 式中,Sx 、Sy 为比例系数。 比例变换可以改变二维图形的形状。当Sx =Sy 且Sx 、Sy 大于1时,图形等比放大;当 Sx =Sy 且Sx 、Sy 小于1大于0时,图形等比缩小;当Sx ≠Sy 时,图形发生形变。前面介绍 过,变换矩阵的子矩阵T4=[s]是对图形作整体比例变换,关于这一点读者可以令Sx =Sy =S 导出,请注意这里s=1/S,即s>1时,图形整体缩小;00是沿x 正向的错切变换,c<0是沿x 负向的错切变换,如图5-7(b)和图5-7(c)所示。 令c=0可以得到沿y 方向的错切变换,b>0是沿y 正向的错切变换,b<0是沿y 负向的 错切变换,如图5-7(d)和图5-7(e)所示。 上面讨论的5种变换给出的都是点变换公式,图形的变换实际上都可以通过点变 换来完成。例如直线段的变换可以通过对两个顶点坐标进行变换,连接新顶点得到变 换后的新直线段;多边形的变换可以通过对每个顶点进行变换,连接新顶点得到变换 后的新多边形。自由曲线的变换可以通过变换控制多边形的控制点后,重新绘制曲线 来实现。 符合下述形式的坐标变换称为二维仿射变换(affinetransformation)。 x'=a11x +a12y +a13 y'=a21x +a22y +a23 { (5-11) 变换后的坐标x'和y'都是变换前的坐标x 和y 的线性函数。参数ai,j 是由变换类型 确定的常数。仿射变换具有平行线变换成平行线,有限点映射为有限点的一般特性。平移、 比例、旋转、反射和错切5种变换都是二维仿射变换的特例,任何一组二维仿射变换总可以 表示为这五种变换的组合。因此,平移、比例、旋转、反射的仿射变换保持变换前后两段直线 ·132· 间的角度、平行关系和长度之比不改变。 5.3 二维图形复合变换 5.3.1 二维图形复合变换原理 复合变换是指图形做了一次以上的基本几何变换,是基本几何变换的组合形式,复合变 换矩阵是基本几何变换矩阵的组合。 P'=PT=PT1T2…Tn ,其中T 为二维复合变换矩阵,T1、T2、…、Tn 为n 个单次二维基 本几何变换矩阵。 注意:进行复合变换时,需要注意矩阵相乘的顺序。由于矩阵乘法不满足交换律,因此 通常T1T2 ≠T2T1。在复合变换中,矩阵相乘的顺序不可交换。通常先计算出T = T1T2…Tn ,再计算P'=PT。 5.3.2 相对于任意参考点的二维几何变换 前面已经定义,二维基本几何变换是相对于坐标原点进行的平移、比例、旋转、反射和错 切这5种变换,但在实际应用中常会遇到参考点不在坐标原点的情况,而比例变换和旋转变 换是与参考点相关的。相对于任意参考点的比例变换和旋转变换应表达为复合变换形式, 变换方法为首先将参考点平移到坐标原点,对坐标原点进行比例变换或旋转变换,然后再进 行反平移将参考点平移回原位置。 例5-1 一个由顶点P1(10,10),P2(30,10)和P3(20,25)所定义的三角形,如图5-8 所示,相对于点Q(10,25)逆时针方向旋转30°,计算变换后的三角形顶点坐标。 (1)将Q 点平移至坐标原点,如图5-9所示。 变换矩阵T1= 1 0 0 0 1 0 -10 -25 1 é . êêêê ù . úúúú 。 (2)三角形相对于坐标原点逆时针方向旋转30°,如图5-10所示。 图5-8 原始图形图5-9 平移变换 ·133· 变换矩阵T2= cos π 6 . è . . . ÷ sin π 6 . è . . . ÷ 0 -sin π 6 . è . . . ÷ cos π 6 . è . . . ÷ 0 0 0 1 é . êêêêêê ê ù . úúúúúú ú = 3 2 12 0 -12 3 2 0 0 0 1 é . êêêêêêê ù . úúúúúúú 。 (3)将参考点Q 平移回原位置,如图5-11所示。 变换矩阵T3= 1 0 0 0 1 0 10 25 1 é . êêêê ù . úúúú 。 图5-10 旋转变换图5-11 反平移变换 三角形变换后顶点的规范化齐次坐标矩阵等于变换前顶点的规范化齐次坐标矩阵乘以 变换矩阵。 x'1 y'1 1 x'2 y'2 1 x'3 y'3 1 é . êêêê ù . úúúú = x1 y1 1 x2 y2 1 x3 y3 1 é . êêêê ù . úúúú T, 而 T =T1T2T3 所以 x'1 y'1 1 x'2 y'2 1 x'3 y'3 1 é . êêêê ù . úúúú = 10 10 1 30 10 1 20 25 1 é . êêêê ù . úúúú· 1 0 0 0 1 0 -10 -25 1 é . êêêê ù . úúúú · 3 2 12 0 -12 3 2 0 0 0 1 é . êêêêêêê ù . úúúúúúú · 1 0 0 0 1 0 10 25 1 é . êêêê ù . úúúú = 17.5 12.01 1 34.82 22.01 1 18.66 30 1 é . êêêê ù . úúúú 这样三角形变换后的顶点坐标为P1(17.5,12.01)、P2(34.82,22.01)和P3(18.66,30)。 5.3.3 相对于任意方向的二维几何变换 二维基本几何变换是相对于坐标轴进行的平移、比例、旋转、反射和错切这5种变换,但 ·134· 在实际应用中常会遇到变换方向不与坐标轴重合的情况。相对于任意方向的变换方法是首 先对任意方向做旋转变换,使该方向与坐标轴重合,然后对坐标轴进行二维基本几何变换, 最后做反向旋转变换,将任意方向还原到原来的方向。 例5-2 将图5-12所示三角形相对于轴线y=kx+b 做反射变换,计算每一步的变换 矩阵。 (1)将点(0,b)平移至坐标原点,如图5-13所示。 变换矩阵T1= 1 0 0 0 1 0 0 -b 1 é . êêêê ù . úúúú 。 图5-12 原始图形图5-13 平移变换 (2)将轴线y=kx 绕坐标系原点顺时针旋转β 角(β=arctank),落于x 轴上,如图5-14 所示。 变换矩阵T2= cosβ -sinβ 0 sinβ cosβ 0 0 0 1 é . êêêê ù . úúúú 。 (3)三角形相对x 轴做反射变换,如图5-15所示。 变换矩阵T3= 1 0 0 0 -1 0 0 0 1 é . êêêê ù . úúúú 图5-14 旋转变换 图5-15 反射变换 ·135·