Skip to content

3.5.4 几何变换和坐标变换

1. 变换

变换刻画的是平面上或空间中对象的位置或形式的改变. 有两种考虑, 它们相互间有密切的联系 [3.22]. 第一种情形是在固定坐标系中对点或对象进行变换. 这称为几何变换(参见第 308 页 3.5.4.1, 第 314 页 3.5.4.5, 1.).

第二种情形中则是对象保持不变, 而对与对象关联的坐标系进行变换. 经过这种坐标变换后 (参见第 311 页 3.5.4.3, 第 315 页 3.5.4.5, 2.), 发生改变的不是对象而是其坐标表示. 在解题时, 其中的一个可能比另一个更适合.

2. 应用领域

  • 在其本身的对象坐标系中刻画建筑构件.

  • 相互关联的零件的运动描述 (例如, 机器人).

  • 再现三维对象的二维投影.

  • 在计算机图形学或计算机动画中刻画运动和变形.

3.5.4.1 几何 2D 变换

1. 平移

由笛卡儿坐标 xP,yP 给定的点 Px 轴的正向上平移 tx ,在 y 轴的正向上平移 ty (图 3.201),则变换后的点 P(xP,yP) 的新坐标为

(3.430)xP=xP+tx,yP=yP+ty.

如果坐标由列向量刻画, 则新坐标的变换公式和逆变换公式为

(3.431a)(xPyP)=(xPyP)+(txty),(3.431b)(xPyP)=(xPyP)(txty).

2. 围绕原点的旋转

在旋转时对象围绕原点旋转 α 角. 如果 α>0 ,则旋转为逆时针方向 (图 3.202). 点 P(xP,yP) 的坐标映射由下面的关系刻画

(3.432)xP=xPcosαyPsinα,yP=xPsinα+yPcosα.

01935d9a-00b5-7750-94cb-0c4c22581c4c_307_387_1460_418_275_0.jpg

01935d9a-00b5-7750-94cb-0c4c22581c4c_307_850_1460_419_272_0.jpg

(3.432) 的矩阵形式为

(3.433a)(xPyP)=(cosαsinαsinαcosα)(xPyP).

这一变换的逆对应于旋转 α 角:

(xPyP)=(cos(α)sin(α)sin(α)cos(α))(xPyP)=(cosαsinαsinαcosα)(xPyP).

(3.433b)

3. 关于原点的缩放变换

在缩放变换时坐标分别乘以 sxsy (图 3.203). 点 P(xP,yP) 的变换由

(3.434)xP=sxxP,yP=syyP

给出. 这一变换的矩阵形式及其逆为

(3.435a)(xPyP)=(sx00sy)(xPyP),(3.435b)(xPyP)=(1/sx001/sy)(xPyP).

缩放变换导致变换对象大小的改变. 一个正的乘数 sx<1 的结果是该对象在 x 方向上收缩. 反之,因子 sx>1 的结果是扩张. 负因子 sx<0 的结果是关于 y 轴的反射. 相应的陈述对于 sy 也成立.

特殊情形的缩放变换:

  • 关于 x 轴的反射: sx=1,sy=1 .

  • 关于 y 轴的反射: sx=1,sy=1 .

  • 关于原点的反射: sx=sy=1 .

4. 剪切变换

在剪切变换时每个坐标的值的改变与另一个坐标成比例. 这一变换的公式为

(3.436)xP=xP+axyP,yP=yP+ayxP.

这一变换的矩阵形式 (符号 m=1axay ) 见下:

(3.437a)(xPyP)=(1axay1)(xPyP),(3.437b)(xPyP)=(1/max/may/m1/m)(xPyP).

图 3.204 显示的是剪切变换的一个例子.

5. 变换的性质

上面引入的变换是仿射变换,即变换点 P(x,y) 坐标可以用 P 原来坐标 (x, y)的线性方程组表示.

评论 这些变换保持共线性和平行性, 即直线变换成直线, 平行线的像是平行线. 而且平移、旋转和反射是保距和保角映射.

01935d9a-00b5-7750-94cb-0c4c22581c4c_309_382_650_429_281_0.jpg

01935d9a-00b5-7750-94cb-0c4c22581c4c_309_845_593_416_331_0.jpg

3.5.4.2 齐次坐标、矩阵表示

尽管旋转变换、缩放变换和剪切变换中的坐标改变能够用乘以 2×2 型矩阵 (3.433a), (3.435a) 和 (3.437a) 来刻画, 但平移并不具有这种表示. 为了能够以同样的方式处理所有这些变换, 我们将引入齐次坐标. 平面上的每个点将得到一个附加的坐标 w0 . 点 P(x,y) 将具有坐标 (xh,yh,w) ,其中

(3.438)x=xhw,y=yhw.

在以下将固定 ww=1 . 因此点 P(x,y) 具有坐标(x, y,1). 于是基本变换可以用下面形式的 3×3 型矩阵给出:

(3.439)(xPyP1)=(m11m12m13m21m22m23001)(xPyP1),即 xP=MxP成立. 

平移矩阵、旋转矩阵、缩放矩阵和剪切矩阵为

(3.440)T(tx,ty)=(10tx01ty001),(3.441)R(α)=(cosαsinα0sinαcosα0001)

旋转矩阵

(3.442)S(sx,sy)=(sx000sy0001),(3.443)V(ax,ay)=(1ax0ay10001).剪切矩阵

3.5.4.3 坐标变换

在几何变换中, 关于对象的变换是在固定坐标系中进行的. 而坐标变换给出的是固定对象在两个不同坐标系中坐标表示之间的关系.

两种类型变换之间的关系显示在图 3.205 中. 如果借助向量 t 将坐标系移位, 则点 P(xP,yP) 的坐标成为 xP=xPtx,yP=yPty . 坐标系沿向量 t 平移的结果与点 P 沿向量 t 平移的结果相同.

同样的结果对于旋转和缩放也成立. 因此, 坐标系的变换等价于对象的逆变换.

01935d9a-00b5-7750-94cb-0c4c22581c4c_310_426_1131_785_322_0.jpg

由平移、旋转或缩放导致的坐标变换可以由 3×3 变换矩阵 T,RS 给出. 注意随后的几何变换矩阵 (3.440)(3.442) :

(3.444)T(tx,ty)=T(tx,ty)=T1(tx,ty),(3.445)R(α)=R(α)=R1(α),(3.446)S(sx,sy)=S(1sx,1sy)=S1(sx,sy).

这样,所有的基本变换都可以用一个 3×3 变换矩阵 M¯ 来刻画:

(3.447)(xPyP1)=(m¯11m¯12m¯13m¯21m¯22m¯23001)(xPyP1),即 xP=M¯xP.

3.5.4.4 变换的复合

复杂的几何变换可以通过不同基本变换的组合来实现. 设有矩阵 M1,M2, , Mn 给出的一列变换. 连续执行这些变换经 n 步将点 P(x,y) 转换为 P . 由这一系列映射导致的变换矩阵 M 是这些矩阵的乘积:

(3.448)M=MnMn1M2M1.

类似地, 相反的变换

(3.449)M1=M11M21Mn11Mn1.

于是,作为对一个点进行 n 次一系列基本变换的替代,可以给出一个复合变换的矩阵直接应用于它.

每个仿射变换可以作为一连串平移、旋转和缩放的复合给出, 甚至剪切也可以作为一次旋转 R(α) ,一次缩放 S(sx,sy) ,再一次旋转 R(β) 的相继应用给出. 参数可以这样来确定,使得 V(a,b)=R(β)S(sx,sy)R(α) 成立.

计算围绕任意一点 Q(xq,yq) 旋转角 α 的变换矩阵: 该复合变换是以下基本变换复合的结果:

(1) 将 Q 移到原点: M1=T(xq,yq) .

(2)围绕原点旋转: M2=R(α) .

(3) 将原点平移回 Q:M3=M11=T(xq,yq) .

这些变换的单个步骤序列见图 3.206. 经由 P1P2 ,点 P 被变换到 P .

M=M3M2M1=T(xq,yq)R(α)T(xq,yq)=(10xq01yq001)(cosαsinα0sinαcosα0001)(10xq01yq001)=(cosαsinαxq(1cosα)+yqsinαsinαcosαyq(1cosα)xqsinα001).

01935d9a-00b5-7750-94cb-0c4c22581c4c_311_636_1583_369_265_0.jpg

  • 关于由方程 y=mx+n 给出的一条直线的反射:

(1)将该直线平移通过原点: M1=T(0,n) .

(2) 顺时针旋转该直线直到它与 x 轴重合: M2=R(α) ,并有 tanα=m .

(3) 关于 x 轴的反射: M3=S(1,1) .

(4) 往回旋转 α:M4=M21=R(α) .

(5) 将该直线平移回原来的位置: M5=M11=T(0,n) .

M=T(0,n)R(α)S(1,1)R(α)T(0,n)=(10001n001)(cosαsinα0sinαcosα0001)(100010001)(cosαsinα0sinαcosα0001)(10001n001)

利用著名的三角关系 sinα=m/m2+1cosα=1/m2+1 得变换矩阵

M=(1m2m2+12mm2+12mnm2+12mm2+1m21m2+12nm2+1001).
  • 所裁边长为 ab 的矩形到宽为 c 且高为 d 的窗口中相似矩形的完全中心变换 (图 3.207). 基本变换序列:

(1) 将 P(xP,yP) 移到原点: M1=T(xP,yP) .

(2)顺时针旋转角 α:M2=R(α) .

(3) 按因子 s=sx=sy=min(ca,db):M3=S(s,s) .

(4) 将原点移到窗口中心: M4=T(c2,d2) .

M=T(c2,d2)S(s,s)R(α)T(xP,yP)=(10c/201d/2001)(s000s0001)(cosαsinα0sinαcosα0001)(10xP01yP001)=(scosαssinαc2s(xPcosα+yPsinα)ssinαscosαd2s(yPcosαxPsinα)001).

01935d9a-00b5-7750-94cb-0c4c22581c4c_313_615_492_412_347_0.jpg

3.5.4.5 3D 变换

三维空间中几何变换和坐标变换的数学刻画基于已在 3.5.4.13.5.4.4 讨论过的二维情形同样的思想. 三维空间的仿射变换是如下基本变换的复合: 平移、围绕一个坐标轴的旋转和关于原点的缩放. 利用齐次坐标这些变换可以用 4×4 变换矩阵给出. 正如在二维情形一样, 复合变换可以用矩阵乘法来实现.

1. 几何变换

P(xP,yP,zP) 的变换按以下规则进行:

(xPyPzP1)=(m11m12m13m14m21m22m23m24m31m32m33m340001)(xPyPzP1), 即 xP=MxP.

(3.450)

基本变换的变换矩阵是

(3.451)T(tx,ty,tz)=(100tx010ty001tz0001 对称 )(3.452)S(sx,sy,sz)=(sx0000sy0000sz00001),

关于原点的缩放

(3.453)Rx(α)=(10000cosαsinα00sinαcosα00001)

围绕 x 轴的旋转

(3.454)Ry(α)=(cosα0sinα00100sinα0cosα00001)

围绕 y 轴的旋转

(3.455)Rz(α)=(cosαsinα00sinαcosα0000100001)

围绕 z 轴的旋转

(3.456)Vxy(ax,ay)=(10ax001ay000100001)

平行于 x,y 平面的剪切

对于正的 α ,旋转从坐标轴正向朝原点看是逆时针的. 对于逆变换有下面的关系成立:

T1(tx,ty,tz)=T(tx,ty,tz),S1(sx,sy,sz)=S(1sx,1sy,1sz),

(3.457)

(3.458)Rx1(α)=Rx(α),Ry1(α)=Ry(α),Rz1(α)=Rz(α).

2. 坐标变换

类似于二维的情形, 坐标系的变换对于点的坐标表示来说具有和逆几何变换 (参见第 311 页 3.5.4.3) 相同的效果. 因此, 变换矩阵是

(3.459)T(tx,ty,tz)=T(tx,ty,tz)=T1(tx,ty,tz),(3.460)Rx(αx)=Rx(αx)=Rx1(αx),(3.461)Ry(αy)=Ry(αy)=Ry1(αy),(3.462)Rz(αz)=Rz(αz)=Rz1(αz),(3.463)S(sx,sy,sz)=S(1sx,1sy,1sz)=S1(sx,sy,sz).

在实际应用中常会发生从一个右手笛卡儿坐标系到另一个笛卡儿坐标系一个特定的变换被取代的情况. 最初的一个常被称为世界坐标系, 而另一个则被称为局部或对象坐标系. 如果在世界坐标系中给出局部坐标系的原点 U(xu,yu,zu) 和单位向量 ei={l1,m1,n1},ej={l2,m2,n2},ek={l3,m3,n3} ,则从世界坐标系到局部坐标系的变换及其逆由矩阵

(3.464)M=(l1m1n1l1xum1yun1zul2m2n2l2xum2yun2zul3m3n3l3xum3yun3zu0001),(3.465)M1=(l1l2l3xum1m2m3yun1n2n3zu0001)

给出.

如果点 P 在世界坐标系中具有坐标 (xP,yP,zP) 而在局部坐标系中的坐标是 (xP,yP,zP) ,则下列等式成立:

(3.466)xP=MxP,(3.467)xP=M1xP.

如果 M1M2 表示从世界坐标系到两个局部坐标系的变换矩阵,则两个局部坐标系之间的变换由矩阵

(3.468)M=M1M21 和 M1=M2M11

给出.

  • 确定围绕通过点 P(xP,yP,zP)Q(xq,yq,zq) 具有方向向量 v={vx,vy , vz}={xPxq,yPyq,zPzq} 的直线旋转 θ 角的旋转矩阵. 易选取 PQ 使它们之间的距离为一个单位,因此 v 是一个单位向量. 首先将该直线变换成坐标系的 z 轴. 接下来,围绕 z 轴旋转 θ 角. 最后将直线变换回原来的直线. 图 3.208 显示将特定直线变换成 z 轴是如何进行的. 它包括以下步骤:

(1) 将 Q 平移到原点: M1=T(xq,yq,zq) .

(2) 围绕 z 轴旋转使得旋转轴被映射到 y,z 平面: M2=Rz(αz) ,并有 cosαz= vy/vx2+vy2sinαz=vx/vx2+vy2 .

P2 具有坐标 (0,vx2+vz2,vz) .

(3) 围绕 x 轴旋转 αx 角直到方向向量 v 的像在 z 轴上: M3=Rx(αx) ,其中 cosαx=vz/|v|sinαx=vx2+vy2/|v| ,点 P3 具有坐标 (0,0,|v|) .

01935d9a-00b5-7750-94cb-0c4c22581c4c_316_635_599_375_384_0.jpg

m=vx2+vy2|v|=1 ,方向向量到 z 轴的变换矩阵是

MA=Rx(αx)Rz(αz)T(xq,yq,zq)=(10000vzm00mvz00001)(vymvxm00vxmvym0000100001)(100xq010yq001zq0001),MA=(vymvxm0vxyqvyxqmvxvzmvyvzmmmzqvxvzxq+vyvzyqmvxvyvzvxxqvyyqvzzq0001),MA1=(vymvxvzmvxxqvxmvyvzmvyyq0mvzzq0001).

MAMA1 与矩阵 (3.465) 和 (3.464) 比较表明,空间直线到 z 轴的变换等同于从世界坐标系到原点为 Qz 轴方向是 v 的局部坐标系的坐标变换. 在局部坐标系中旋转围绕 z 轴进行. 全部旋转的变换矩阵由矩阵 (3.455) 给出

M=MA1Rz(θ)MA=(vymvxvzmvxxqvxmvyvzmvyyq0mvzzq0001)(cosθsinθ00sinθcosθ0000100001)(vymvxm0vxyqvyxqmvxvzmvyvzmmmzqvxvzxq+vyvzyqmvxvyvzvxxqvyyqvzzq0001).

在第 386 页 4.4 中我们将利用四元数的性质给出另一种方法来刻画旋转矩阵.

3.5.4.6 形变变换

在第 314 页 3.5.4.5 讨论的仿射变换改变了对象的位置并产生了沿给定方向的拉伸或压缩. 如果变换矩阵 M=(mij) 的元素像到目前为止那样不是常数,但它们是位置的函数, 那么这将导致广义的改变结构的变换类. 矩阵的元素现在具有形式:

(3.469)mij=mij(x,y,z).

1. 收缩

这一变换是缩放的推广. 在沿 z 轴方向收缩时缩放参数 sx,syz 的函数. 变换矩阵为

(3.470)S(sx(z),sy(z),1)=(sx(z)0000sy(z)0000100001).

函数 sx(z)sy(z) 定义了收缩外观. 如果 sx(z)>1 ,则变换对象沿 x 轴被拉伸,如果 sx(z)<1 ,则对象被压缩. 图 3.209(b) 显示的是图 3.209(a) 中的单位立方体经函数 sx(z)=sy(z)=1/(1z2) 变换的结果.

2. 围绕 z 轴的扭曲

这一变换是围绕 z 轴的旋转的推广. 旋转角沿 z 轴发生改变. 变换矩阵为

(3.471)Rz(α(z))=(cosα(z)sinα(z)00sinα(z)cosα(z)0000100001).

函数 α(z) 定义的是沿 z 轴的旋转角. 图 3.209(c) 显示的是单位立方体旋转 α(z)= π4z 角.

3. 围绕 x 轴的弯曲

弯曲时旋转角沿与旋转轴垂直的方向改变. 变换矩阵具有下面的形式:

(3.472)Rx(α(z))=(10000cosα(z)sinα(z)00sinα(z)cosα(z)00001).

图 3.209(d) 显示的是单位立方体以 α(z)=π8z 角弯曲.

像仿射变换一样, 这些形变可以进行系列应用. 图 3.209(e) 中的对象是单位立方体先收缩后扭曲的结果.

01935d9a-00b5-7750-94cb-0c4c22581c4c_318_381_1213_884_206_0.jpg

version 1.24.0