线性变换

什么是线性变换?

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

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

那么,称 f f f为线性变换。

线性变换的矩阵表示

f ( v ⃗ ) = f ( x i ⃗ + y j ⃗ + z k ⃗ ) = f ( x i ⃗ ) + f ( y j ⃗ ) + f ( z k ⃗ ) = x f ( i ⃗ ) + y f ( j ⃗ ) + z f ( 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} 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 )

缩放变换

易知,缩放变换 S ( v ⃗ ) = S ( x , y , z ) = ( s x x , s y y , s z z ) S(\vec v) = S(x, y, z) = (s_x x, s_y y, s_z z) S(v )=S(x,y,z)=(sxx,syy,szz)。那么,我们尝试证明一下它是线性变换:
S ( u ⃗ + 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 x u x + s x v x , s y u y + s y v y , s z u z + s z v z ) = ( s x u x , s y u y , s z u z ) + ( s x v x , s y v y , s z v z ) = 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(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 )

S ( k v ⃗ ) = S ( k v x , k v y , k v z ) = ( k s x v x , k s y v y , k s z v z ) = k ( s x v x , s y v y , s z v z ) = k S ( 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(kv )=S(kvx,kvy,kvz)=(ksxvx,ksyvy,kszvz)=k(sxvx,syvy,szvz)=kS(v )

综上,我们证明了缩放变换是线性变换。由之前线性变换的矩阵表示,我们可以推导缩放变换的矩阵表示为
[ S ( i ⃗ ) S ( j ⃗ ) S ( k ⃗ ) ] = [ s x 0 0 0 s y 0 0 0 s z ] \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} S(i )S(j )S(k )=sx000sy000sz

旋转变换

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

在这里插入图片描述

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值