首页 > 技术文章 > 线性变换:基底变换推导

JingeTU 2017-03-08 15:15 原文

今天上午,因为“家里蹲”大神在 SLAM 交流群里问了一下为什么 \(E\) 分解出来的 \(R\) 需要判断 \(R\) 的行列式,如果为 -1,就需要所有元素乘以 -1,以得到行列式为 +1 的 \(R\)

旋转矩阵是将原基底下的坐标变换为新基底下的坐标,是一个线性变换的过程。

从二维旋转矩阵开始

二维旋转矩阵推导利用 \(cos, sin\) 和的分列式最简单。

\[X_1 = (x_1, y_1) = (r \cdot cos\alpha, r \cdot sin\alpha) \]

\[\begin{align} X_2 = (x_2, y_2) &= (r \cdot cos(\alpha + \beta), r \cdot sin(\alpha + \beta)) \\ &= (r \cdot cos\alpha \cdot cos\beta - r \cdot sin\alpha \cdot sin\beta, \\ & r \cdot cos\alpha \cdot sin\beta + r \cdot sin\alpha \cdot cos\beta) \\ &=(cos\beta \cdot x_1 - sin\beta \cdot y_1, sin\beta \cdot x_1 + cos\beta \cdot y_1) \end{align} \]

\[\begin{bmatrix} x_2 \\ y_2 \end{bmatrix} = \begin{bmatrix} cos\beta & -sin\beta \\ sin\beta & cos\beta \end{bmatrix} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} \]

这就是一个线性变换的过程,将原基底下的坐标 \(X_1\) 变换到现基底下的坐标 \(X_2\)

那么这两组基底分别是什么,原基底当然就是原坐标系 \(xOy\) 的两个轴的单位向量 \([e_1, e_2]\)

现基地是下图中的 \(x'Oy'\) 的两个轴的单位向量 \([e'_1, e'_2]\)

由图中的角度可以得到现基底在原基底中的坐标:

\[e'_1(cos\beta, -sin\beta) \\ e'_2(sin\beta, cos\beta) \]

模为 1。

这个和旋转公式存在联系:

\[X_2 = M X_1 \\ M = \begin{bmatrix} {e'_1}^T \\ {e'_2}^T \end{bmatrix} \]

于是从坐标分量的角度看:

\[x_2 = {e'_1}^T X_1 = |e'_1| |X_1| cos(\alpha + \beta) = |X_1| cos(\alpha + \beta) \\ y_2 = {e'_2}^T X_1 = |e'_1| |X_1| cos({\pi \over 2} - \alpha - \beta) = |X_1| cos({\pi \over 2} - \alpha - \beta) \]

这就是在原坐标系下的投影。

三维旋转矩阵的行列式

同样的道理,三维旋转矩阵也是一个线性变换,新基底在原基底中的坐标是 \(R\)

如果 \(R\) 的行列式为 -1,等价于在正常的旋转变换的结果上,对每一个坐标乘以 -1,其结果是对原点成中心对称

如果是二维的旋转矩阵,是什么情况呢?如果按照原点中心对称,仅仅是多旋转了 180 度,并不能表现为行列式为 -1。按照行列式计算的定义,因为是二维的,“负负”得正,行列式没有任何影响。

BTW,三维坐标系存在左手系和右手系,如果对三个轴上的坐标都乘以 -1,相当于三个轴的反方向都变成了正方向。但是这个时候左右手性(这好像是分子化学用词。。。)没有发生改变。如果是两个轴的反方向变成了正方向,左收系就变成了由右手系。一个轴反方向不会发生改变。于是,奇数轴反方向不会改变左右手性,偶数轴反方向会改变左右手性。

推荐阅读