线性变换:基底变换推导
今天上午,因为“家里蹲”大神在 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,相当于三个轴的反方向都变成了正方向。但是这个时候左右手性(这好像是分子化学用词。。。)没有发生改变。如果是两个轴的反方向变成了正方向,左收系就变成了由右手系。一个轴反方向不会发生改变。于是,奇数轴反方向不会改变左右手性,偶数轴反方向会改变左右手性。