什么是线性变换?

假设有一数学函数ff,使得三维向量v=(x,y,z)\vec v=(x,y,z),有f(v)=f(x,y,z)=(x,y,z)f(\vec v) = f(x, y, z) = (x',y',z')。那么,如果ff满足:

  1. f(u+v)=f(u)+f(v)f(\vec u + \vec v) = f(\vec u) + f(\vec v)
  2. f(kv)=kf(v)f(k \vec v) = kf(\vec v)

那么,称ff为线性变换。

线性变换的矩阵表示

f(v)=f(xi+yj+zk)=f(xi)+f(yj)+f(zk)=xf(i)+yf(j)+zf(k)=[x,y,z][f(i)f(j)f(k)] \begin{aligned} f(\vec v) &= f(x \vec i + y \vec j + z \vec k) \\ &= f(x \vec i) + f(y \vec j) + f(z \vec k) \\ &= xf(\vec i) + yf(\vec j) + zf(\vec k) \\ &= [x, y, z] \cdot \begin{bmatrix} f(\vec i) \\ f(\vec j) \\ f(\vec k) \end{bmatrix} \end{aligned}

缩放变换

易知,缩放变换S(v)=S(x,y,z)=(sxx,syy,szz)S(\vec v) = S(x, y, z) = (s_x x, s_y y, s_z z)。那么,我们尝试证明一下它是线性变换:
S(u+v)=S(ux+vx,uy+vy,uz+vz)=(sx(ux+vx),sy(uy+vy),sz(uz+vz))=(sxux+sxvx,syuy+syvy,szuz+szvz)=(sxux,syuy,szuz)+(sxvx,syvy,szvz)=S(u)+S(v) \begin{aligned} S(\vec u + \vec v) &= S(u_x+v_x, u_y+v_y, u_z+v_z) \\ &= (s_x(u_x+v_x), s_y(u_y+v_y), s_z(u_z+v_z)) \\ &= (s_xu_x + s_xv_x, s_yu_y + s_yv_y, s_zu_z + s_zv_z) \\ &= (s_xu_x, s_yu_y, s_zu_z) + (s_xv_x, s_yv_y, s_zv_z) \\ &= S(\vec u) + S(\vec v) \end{aligned}

S(kv)=S(kvx,kvy,kvz)=(ksxvx,ksyvy,kszvz)=k(sxvx,syvy,szvz)=kS(v) \begin{aligned} S(k\vec v) &= S(kv_x, kv_y, kv_z) \\ &= (ks_xv_x, ks_yv_y, ks_zv_z) \\ &= k(s_xv_x, s_yv_y, s_zv_z) \\ &= kS(\vec v) \end{aligned}

综上,我们证明了缩放变换是线性变换。由之前线性变换的矩阵表示,我们可以推导缩放变换的矩阵表示为
[S(i)S(j)S(k)]=[sx000sy000sz] \begin{bmatrix} S(\vec i) \\ S(\vec j) \\ S(\vec k) \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & s_z \end{bmatrix}

旋转变换

我们定义旋转变换为将一个向量v\vec v绕任意轴n\vec n顺时针旋转θ\theta角度,如图所示:

线性变换

由图可知,我们要求的就是将向量v\vec v绕向量n\vec n旋转θ\theta角度后得到的v\vec v'。首先,我们注意到在旋转过程中,与旋转轴平行的向量是不参与旋转过程的,只有与旋转轴垂直的向量在真正旋转。因此可以将向量v\vec v分解为与n\vec n平行的向量v\vec v_\parallel和垂直的向量v\vec v_\perp。即:
v=v+v \vec v = \vec v_\parallel + \vec v_\perp
那么
v=v+v \vec v' = \vec v_\parallel + \vec v'_\perp
其中,平行向量v\vec v_\parallel是向量v\vec v在旋转轴n\vec n上的投影。这里假定,旋转轴向量n\vec n是归一化过的,即单位向量。由向量投影的定义,可得到
v=(vn)n \vec v_\parallel = (\vec v \cdot \vec n) \vec n
进而可得
v=vv=v(vn)n \vec v_\perp = \vec v - \vec v_\parallel = \vec v - (\vec v \cdot \vec n) \vec n
接下来,我们只要求得旋转后的v\vec v'_\perp即可。注意到已知的v\vec v_\perp,且这两个向量都位于同一个圆的旋转平面上,因此只要再得到一个垂直于v\vec v_\perp的向量w\vec w,且向量w\vec w与这两个向量共面,就可以通过旋转角度θ\theta算出向量v\vec v'_\perp了:
v=vcosθ+wsinθ \vec v'_\perp = \vec v_\perp \cdot cos\theta + \vec w \cdot sin\theta
那么,怎样的w\vec w是满足以上条件的呢?注意到向量的叉积的几何意义:两向量的叉积后得到的向量与这两个向量是垂直的。所以,我们令
w=vn×v(n×v) \vec w = \frac{|\vec v_\perp|}{|\vec n \times \vec v|} \cdot (\vec n \times \vec v)
向量前面的系数是为了让向量的模与v\vec v_\perp相等。这样就求出了满足条件的w\vec w。特别地,由向量叉积的定义,可以将上式简化为
w=vnvsinθ (n×v) \vec w = \frac{|\vec v_\perp|}{|\vec n| |\vec v| sin\theta} \cdot \ (\vec n \times \vec v)
由图可知,v=vsinθ|\vec v_\perp| = |\vec v| sin\theta,而向量n\vec n是单位向量,所以得到:
w=n×v \vec w = \vec n \times \vec v
综合以上若干等式,求出最终的v\vec v'
v=(vn)n+(v(vn)n)cosθ+(n×v)sinθ \vec v' = (\vec v \cdot \vec n) \vec n + (\vec v - (\vec v \cdot \vec n) \vec n)cos\theta + (\vec n \times \vec v)sin\theta
回到线性变换的定义来,旋转变换R(v)=R(x,y,z)R(\vec v) = R(x, y, z)。将其代入上式,可以得到
R(x,y,z)=(r11x+r21y+r31z,r12x+r22y+r32z,r13x+r23y+r33z) R(x,y,z) = (r_{11}x + r_{21}y + r_{31}z, r_{12}x + r_{22}y + r_{32}z, r_{13}x + r_{23}y + r_{33}z)
根据线性变换的定义,容易证明旋转变换是一种线性变换。那么,旋转变换的矩阵表示为:
[R(i)R(j)R(k)]=[r11r12r13r21r22r23r31r32r33]=[c+(1c)x2(1c)xy+sz(1c)xzsy(1c)xyszc+(1c)y2(1c)yz+sx(1c)xz+sy(1c)yzsxc+(1c)z2] \begin{bmatrix} R(\vec i) \\ R(\vec j) \\ R(\vec k) \end{bmatrix} = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} = \begin{bmatrix} c + (1 - c)x^2 & (1-c)xy + sz & (1-c)xz - sy \\ (1-c)xy - sz & c+(1-c)y^2 & (1-c)yz + sx \\ (1-c)xz + sy & (1-c)yz - sx & c+(1-c)z^2 \end{bmatrix}
其中,c=cosθ,s=sinθ,x,y,zc=cos\theta, s = sin\theta, x,y,z分别为向量n\vec n的三个分量。

相关文章:

  • 2022-01-18
  • 2021-11-05
  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2022-01-24
  • 2021-09-29
  • 2021-10-10
猜你喜欢
  • 2021-12-19
  • 2021-10-13
  • 2021-05-28
  • 2022-01-24
相关资源
相似解决方案