线性变换:基底变换推导

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

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

从二维旋转矩阵开始

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

[X_1 = (x_1, y_1) = (r cdot cosalpha, r cdot sinalpha) ]

[egin{align} X_2 = (x_2, y_2) &= (r cdot cos(alpha + eta), r cdot sin(alpha + eta)) \ &= (r cdot cosalpha cdot coseta - r cdot sinalpha cdot sineta, \ & r cdot cosalpha cdot sineta + r cdot sinalpha cdot coseta) \ &=(coseta cdot x_1 - sineta cdot y_1, sineta cdot x_1 + coseta cdot y_1) end{align} ]

[egin{bmatrix} x_2 \ y_2 end{bmatrix} = egin{bmatrix} coseta & -sineta \ sineta & coseta end{bmatrix} egin{bmatrix} x_1 \ y_1 end{bmatrix} ]

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

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

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

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

[e'_1(coseta, -sineta) \ e'_2(sineta, coseta) ]

模为 1。

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

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

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

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

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

三维旋转矩阵的行列式

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

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

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

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

原文地址:https://www.cnblogs.com/JingeTU/p/6519588.html