杂谈: 线性变换 Linear Transfomation

Abstract

阅读此文的基础是理解“线性”这个概念 -------- 链接

首先从字面意思来理解,变换Transfomation是一个操作或一个过程,更彻底地你可以将它理解为一个函数映射(事实上,我们在之后的讨论中会尽量往“映射”这个角色靠拢),而这个函数是线性的。


考虑一个二维向量空间的例子 --- 缩放

回顾一下向量这个概念,任何一个向量都能以一组基的线性组合来表示:(默认情形下我们认为它们是标准正交基

  • 基底为\(x\)轴正方向的 \(\bf{v_{1}} = \bf{(1, 0)}\)\(y\)轴正方向的 \(\bf{v_{2}} = \bf{(0, 1)}\) 。在这组基下取一个向量 \(\bf{i} = \bf{(3, 2)}\) ,它可由 \(3\bf{v_{1}} + 2\bf{v_{2}}\) 表示。

  • 考虑向量 \(\bf{(6, 4)}\) ,它由线性变换 \(\left(\begin{array}{cc}2 & 0\\ 0 & 2\end{array}\right)\left(\begin{array}{c}3\\ 2\end{array}\right)\) 得到。但若换个角度:对于由 \(3\bf{v_{1}} + 2\bf{v_{2}}\) 表示的向量 \(\bf{i}\) ,若表示它的标准基被应用线性映射 \(Trans: V \rightarrow W\)后,变为 \(\bf{w_{1}}\)\(\bf{w_{2}}\),则向量 \(\bf{i}\) 被映射成为由新的一组基 \(\bf{w_{1}}\)\(\bf{w_{2}}\) 构成的向量空间 \(W\) 中的\(\bf{i^{'}}\),且由新的线性组合 \(3\bf{w_{1}}\) + 2\(\bf{w_{2}}\) 表示。


考虑另一个二维向量空间的例子 --- 旋转

这一次我们关注非单独点进行线性变换的情形:

  • 左边是一个由一对基 \(\bf{v_{1}} = \bf{(a, b)}\)\(\bf{v_{2}} = \bf{(c, d)}\) 构建的向量空间\(V\)。这对基底相对于标准正交基逆时针旋转了\(\theta\),并构成了一个正方形。

  • 现在将这对基继续往逆时针方向旋转\(\alpha\)角度,变为\(\bf{w_{1}} = \bf{(a', b')}\)\(\bf{w_{2}} = \bf{(c', d')}\)。可以看到,正方形上的所有点被一个线性映射投影到了另一个向量空间\(W\),视觉上的效果便是其绕原点也旋转了\(\alpha\)角度。

  • 现在通过这组前后变换的基来计算这个线性映射:

设基底一个分量的模为\(r\)(即旋转半径),易知:

\( \begin{equation} \begin{aligned} \tt{a^{'}} &= \tt{\tt{r \cdot cos(\theta + \alpha)}} \\ &= \tt{r \cdot (cos\theta \cdot cos\alpha - sin\theta \cdot sin\alpha)} \\ &= \tt{(r \cdot cos\theta) \cdot cos\alpha - (r \cdot sin\theta) \cdot sin\alpha} \\ &= \tt{a \cdot cos\alpha - b \cdot sin\alpha} \end{aligned} \end{equation} \)

\( \begin{equation} \begin{aligned} \tt{b^{'}} &= \tt{\tt{r \cdot sin(\theta + \alpha)}} \\ &= \tt{r \cdot (sin\theta \cdot cos\alpha + cos\theta \cdot sin\alpha)} \\ &= \tt{(r \cdot cos\theta) \cdot sin\alpha + (r \cdot sin\theta) \cdot cos\alpha} \\ &= \tt{a \cdot sin\alpha + b \cdot cos\alpha} \end{aligned} \end{equation} \)

也即:\(\left(\begin{array}{c}a^{'}\\ b^{'}\end{array}\right) = \left(\begin{array}{cc}cos\alpha & -sin\alpha\\ sin\alpha & cos\alpha\end{array}\right)\left(\begin{array}{c}a\\ b\end{array}\right)\)


注意事项

  • 在讨论旋转时,我们规定必须绕原点进行旋转;绕非原点旋转的变换不是线性变换,因为其不满足线性的其次性,且这种情况称为仿射变换

考虑一个二维向量空间的综合例子 --- 旋转 + 缩放

现在考虑将原向量空间的一个基单独进行旋转,然后再对新向量空间中的一组基进行缩放(假设缩放倍数为\(n\)),以让我们的例子看起来不是那么单调:

由于我们仅对基\(v2\)进行了旋转,结合我们之前得出的结论,可轻易得到这样的等式:

\(\left(\begin{array}{cc}z_1 \\ z_2\end{array}\right) = \left(\begin{array}{cc}1 & 0\\ sin\theta & cos\theta\end{array}\right)\left(\begin{array}{cc}n & 0\\ 0 & n\end{array}\right)\left(\begin{array}{cc}v1 \\ v2\end{array}\right)\)


考虑一个特殊例子 --- 三维坐标系坐标空间转换

目标

将某三维坐标空间中的点集转换到另一个坐标空间中。

需提前了解的细节

考虑一个坐标系,由原点 \(\bf{e}\) 以及一组基 \(\bf{uvw}\) 构成,则坐标 \((\tt{u,v,w})\) 描述一个点

\(\bf{e}+\tt{u}\bf{u}+\tt{v}\bf{v}+\tt{w}\bf{w}\)

思考一下,为什么这里要加上原点e?因为在这里我们表示的是点,点需要考虑位置,而向量只需考虑方向。

在计算机中,这样的坐标系并不是凭空被存储表示的。一般来说,我们会规定一个标准的正规坐标系作为参考系(也即所谓的全局global / 世界world坐标系),之后便可以用该参考系来表示其它类似于上述 \(\bf{uvw}\) 的坐标系。

坐标空间变换

在三维空间中,我们习惯定义一个 \(\bf{xyz}\) 标准正交基为参考系,且通常原点与基向量的坐标分别为:

  • \(\bf{o} = \tt{(0, 0, 0)}\)

  • \(\bf{x} = \tt{(1, 0, 0)}\)

  • \(\bf{y} = \tt{(0, 1, 0)}\)

  • \(\bf{z} = \tt{(0, 0, 1)}\)

假设图中左边的便是 \(\bf{xyz}\) 参考系。观察右上角的坐标系,由原点 \(\bf{e}\) 以及一组标准正交基 \(\bf{uvw}\) 组成。

有一点 \(\tt{P}\)\(\bf{uvw}\) 下的坐标为 \(\tt{(u_p,v_p,w_p)}\),则在 \(\bf{uvw}\) 系中 \(\tt{P}\) 可表示为线性组合:

\(\tt{P}_{uvw} = \bf{e} + \tt{u_p}\bf{u} + \tt{v_p}\bf{v} + \tt{w_p}\bf{w}\ \ \ (1)\)

我们已经知道,\(\bf{uvw}\) 系的原点与基向量本身是由参考系 \(\bf{xyz}\) 表示的,也即:

  • \(\bf{e} = \tt{(x_e, y_e, z_e)}\)

  • \(\bf{u} = \tt{(x_u, y_u, z_u)}\)

  • \(\bf{v} = \tt{(x_v, y_v, z_v)}\)

  • \(\bf{w} = \tt{(x_w, y_w, z_w)}\)

\((1)\) 式可化为:

\( \begin{equation} \begin{aligned} \tt{P}_{xyz} &= \tt{(x_e, y_e, z_e) + u_p(x_u, y_u, z_u) + v_p(x_v, y_v, z_v) + w_p(x_w, y_w, z_w)} \\ &= \tt{ (x_e+u_{p}x_{u}+v_{p}x_{v}+w_{p}x_{w})+(y_e+u_{p}y_{u}+v_{p}y_{v}+w_{p}y_{w})+(z_e+u_{p}z_{u}+v_{p}z_{v}+w_{p}z_{w}) } \end{aligned} \end{equation} \)

有了这些信息,我们已知 \(\tt{P}\)\(\bf{uvw}\) 下的坐标表示,要求其被转换到参考系 \(\bf{xyz}\) 后坐标 \(\tt{(x_p,y_p,z_p)}\) 的具体值,可用矩阵方程来表示:

\(\left[\begin{array}{c}x_p \\ y_p \\ z_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & x_v & x_w & 0\\ y_u & y_v & y_w & 0 \\ z_u & z_v & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}1 & 0 & 0 & x_e\\ 0 & 1 & 0 & y_e \\ 0 & 0 & 1 & z_e \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}u_p \\ v_p \\w_p \\ 1\end{array}\right]\)

写得更简单点便是:

\(\tt{P}_{xyz} = \left[\begin{array}{cccc}u & v & w & e\\ 0 & 0 & 0 & 1\end{array}\right]\tt{P}_{uvw}\)

我们讨论的是将点集从某个标准正交基 \(\bf{uvw}\) 转换到 参考系 \(\bf{xyz}\)。如果想做一个逆操作:将点集从参考系转换到 \(\bf{uvw}\),只需将此变换矩阵求逆即可:

\(\tt{P}_{uvw} = \left[\begin{array}{cccc}u & v & w & e\\ 0 & 0 & 0 & 1\end{array}\right]^{-1}\tt{P}_{xyz}\)

由于我们规定 \(\bf{uvw}\) 为正交基,由定义知,正交矩阵的转置即为它的逆,所以上式可变为:

\(\left[\begin{array}{c}u_p \\ v_p \\ w_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & x_v & x_w & 0\\ y_u & y_v & y_w & 0 \\ z_u & z_v & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]^\mathrm{T}\left[\begin{array}{cccc}1 & 0 & 0 & x_e\\ 0 & 1 & 0 & y_e \\ 0 & 0 & 1 & z_e \\ 0 & 0 & 0 & 1\end{array}\right]^\mathrm{-1}\left[\begin{array}{c}x_p \\ y_p \\z_p \\ 1\end{array}\right]\)

也即:

\(\left[\begin{array}{c}u_p \\ v_p \\ w_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & y_u & z_u & 0\\ x_v & y_v & z_v & 0 \\ x_w & y_w & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}1 & 0 & 0 & -x_e\\ 0 & 1 & 0 & -y_e \\ 0 & 0 & 1 & -z_e \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_p \\ y_p \\z_p \\ 1\end{array}\right]\)


你可能会疑惑,将点集从标准系转换到 \(\bf{uvw}\) 用得着这么复杂吗,我用这个变换矩阵不就行了吗:

\(\tt{P}_{uvw} = \left[\begin{array}{cccc}x & y & z & o\\ 0 & 0 & 0 & 1\end{array}\right]\tt{P}_{xyz}\)

回答:是可以,前提是你要额外计算 \(\bf{xyz}\) 基向量在 \(\bf{uvw}\) 中的坐标表示。正如我们推导的上述一系列公式,都是基于 "\(\bf{uvw}\) 系的原点与基向量本身是由参考系 \(\bf{xyz}\) 表示的" 这个大前提,所以还是乖乖求个逆操作吧,也没那么难。


如有不严谨的地方欢迎指出 😃

posted @ 2021-06-04 19:03  elexenon  阅读(366)  评论(0编辑  收藏  举报