这是本系列第二篇笔记,记录了第三课的内容:课程录像、课件。第三课主要讲了几种简单的二维变换,并从平移变换引入了齐次坐标的概念,最后将二维的规律推广到了三维。
二维变换
- scale 缩放变换:\(\begin{bmatrix}s_x & 0 \\ 0 & s_y\end{bmatrix}\)
- shear 切变变换:\(\begin{bmatrix}1&a\\0&1\end{bmatrix}\)
- rotate 旋转变换:\(\begin{bmatrix}\color{blue}{\cos\theta}&\color{olive}{-\sin\theta}\\\color{blue}{\sin\theta}&\color{olive}{\cos\theta}\end{bmatrix}\)
- 该矩阵可以这么理解:取矩阵里的列向量,有:
- x 轴的单位向量 \((1, 0)\) 变换成为了 \((\cos\theta, \sin\theta)\)
- y 轴的单位向量 \((0, 1)\) 变换成为了 \((-\sin\theta, \cos\theta)\)
- 如何理解/推导?
- 跟踪各个单位向量的坐标变化即可推导得出
- 为什么是列向量而不是行向量?
- 行向量的每个分量代表变换过程中原始的几个单位向量分别对变换后的 x 轴的影响程度
- 列向量的每个分量代表某个单位向量对变换后的几个坐标轴的影响程度,刚好形成“某个原始单位向量变换成了什么向量”的语义
- 如何理解/推导?
- 如果使用的是行向量而非列向量,则需要从矩阵中取行向量
- 该矩阵可以这么理解:取矩阵里的列向量,有:
齐次坐标
- 2x2 的矩阵无法表示二维的平移变换,因此引入了齐次坐标 homogeneous coordinates 的概念
- translate 平移变换:\(\begin{bmatrix}1&0&t_x\\0&1&t_y\\0&0&1\end{bmatrix}\)
- 齐次坐标下如何表示点与向量
- 如何表示点:\((x, y, \textbf{1})^T\)
- 如何表示向量:\((x, y, \textbf{0})^T\)
- 为什么规定向量对应 0?
- 因为这使得向量在齐次坐标下仍然遵守平移不变性
- 为什么规定向量对应 0?
- 优点:以下运算均符合几何意义
- 向量 ± 向量 = 向量
- 点 ± 向量 = 点
- 点 - 点 = 向量
- 点 + 点 = 点
- 有规定:\((x, y, w)^T\) 当 \(w\ne0\) 时表示点 \((\frac xw, \frac yw, 1)\)
- 因此该点的几何意义实际上是中点
- 齐次坐标下的变换矩阵是先进行线性变换再进行平移变换
三维变换
- 缩放、切变、平移都只是增加了一个维度,不再赘述
- 旋转变换:
- 绕着 x 轴逆时针旋转 \(\theta\) 角:\(\textbf{R}_x(\theta)=\begin{bmatrix}1&0&0&0\\0&\cos\theta&-\sin\theta&0\\0&\sin\theta&\cos\theta&0\\0&0&0&1\end{bmatrix}\)
- 绕着 y 轴逆时针旋转 \(\theta\) 角:\(\textbf{R}_y(\theta)=\begin{bmatrix}\cos\theta&0&\sin\theta&0\\0&1&0&0\\-\sin\theta&0&\cos\theta&0\\0&0&0&1\end{bmatrix}\)
- 注意 y 轴是反过来的,因为不符合右手定则
- 绕着 z 轴逆时针旋转 \(\theta\) 角:\(\textbf{R}_z(\theta)=\begin{bmatrix}\cos\theta&-\sin\theta&0&0\\\sin\theta&\cos\theta&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}\)
- 沿着任意轴旋转 \(\theta\) 角:
- 先将旋转轴平移变换至过零点,得到 \(\vec n\)
- 罗德里格斯旋转公式:\(\textbf R(\vec n, \theta) = \cos(\theta)\,\textbf{I}+(1-\cos(\theta))\,\vec n\vec n^T+\sin(\theta)\,\begin{bmatrix}0&-n_z&n_y\\n_z&0&-n_x\\-n_y&n_x&0\end{bmatrix}\)
- 注意在使用罗德里格斯公式时,上述式子仅计算出了变换矩阵左上角 3x3 的区域,右下角应按单位矩阵的形式填充;
其他
- 复合变换:
- 记 \(\boldsymbol T=\boldsymbol B\boldsymbol A\),且有列向量 \(p^T\),则有 \(\boldsymbol B\boldsymbol A p^T = \boldsymbol T p^T\)
- 上式中,顺序为先变换 \(\boldsymbol A\) 再变换 \(\boldsymbol B\)