什么是线性变换?
假设有一数学函数f,使得三维向量v=(x,y,z),有f(v)=f(x,y,z)=(x′,y′,z′)。那么,如果f满足:
- f(u+v)=f(u)+f(v)
- f(kv)=kf(v)
那么,称f为线性变换。
线性变换的矩阵表示
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)=(sxx,syy,szz)。那么,我们尝试证明一下它是线性变换:
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(kv)=S(kvx,kvy,kvz)=(ksxvx,ksyvy,kszvz)=k(sxvx,syvy,szvz)=kS(v)
综上,我们证明了缩放变换是线性变换。由之前线性变换的矩阵表示,我们可以推导缩放变换的矩阵表示为
⎣⎡S(i)S(j)S(k)⎦⎤=⎣⎡sx000sy000sz⎦⎤
旋转变换
我们定义旋转变换为将一个向量v绕任意轴n顺时针旋转θ角度,如图所示:

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