线性变换

什么是线性变换?

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

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

那么,称f为线性变换。

线性变换的矩阵表示

\begin{align*} 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{align*}

缩放变换

易知,缩放变换S(\vec v) = S(x, y, z) = (s_x x, s_y y, s_z z)。那么,我们尝试证明一下它是线性变换:
\begin{align*} 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{align*}

\begin{align*} 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{align*}

综上,我们证明了缩放变换是线性变换。由之前线性变换的矩阵表示,我们可以推导缩放变换的矩阵表示为
\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}

旋转变换

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

线性变换1.png

由图可知,我们要求的就是将向量\vec v绕向量\vec n旋转\theta角度后得到的\vec v'。首先,我们注意到在旋转过程中,与旋转轴平行的向量是不参与旋转过程的,只有与旋转轴垂直的向量在真正旋转。因此可以将向量\vec v分解为与\vec n平行的向量\vec v_\parallel和垂直的向量\vec v_\perp。即:
\vec v = \vec v_\parallel + \vec v_\perp
那么
\vec v' = \vec v_\parallel + \vec v'_\perp
其中,平行向量\vec v_\parallel是向量\vec v在旋转轴\vec n上的投影。这里假定,旋转轴向量\vec n是归一化过的,即单位向量。由向量投影的定义,可得到
\vec v_\parallel = (\vec v \cdot \vec n) \vec n
进而可得
\vec v_\perp = \vec v - \vec v_\parallel = \vec v - (\vec v \cdot \vec n) \vec n
接下来,我们只要求得旋转后的\vec v'_\perp即可。注意到已知的\vec v_\perp,且这两个向量都位于同一个圆的旋转平面上,因此只要再得到一个垂直于\vec v_\perp的向量\vec w,且向量\vec w与这两个向量共面,就可以通过旋转角度\theta算出向量\vec v'_\perp了:
\vec v'_\perp = \vec v_\perp \cdot cos\theta + \vec w \cdot sin\theta
那么,怎样的\vec w是满足以上条件的呢?注意到向量的叉积的几何意义:两向量的叉积后得到的向量与这两个向量是垂直的。所以,我们令
\vec w = \frac{|\vec v_\perp|}{|\vec n \times \vec v|} \cdot (\vec n \times \vec v)
向量前面的系数是为了让向量的模与\vec v_\perp相等。这样就求出了满足条件的\vec w。特别地,由向量叉积的定义,可以将上式简化为
\vec w = \frac{|\vec v_\perp|}{|\vec n| |\vec v| sin\theta} \cdot \ (\vec n \times \vec v)
由图可知,|\vec v_\perp| = |\vec v| sin\theta,而向量\vec n是单位向量,所以得到:
\vec w = \vec n \times \vec v
综合以上若干等式,求出最终的\vec v'
\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(\vec 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)
根据线性变换的定义,容易证明旋转变换是一种线性变换。那么,旋转变换的矩阵表示为:
\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\theta, s = sin\theta, x,y,z分别为向量\vec n的三个分量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容