齐次坐标系下的三维变换可以写成下面的形式:
Scale
Translation
Rotation
旋转矩阵是正交矩阵,其矩阵的逆等于矩阵的转置。
绕轴旋转
Rotation around x-, y-, or z-axis
绕着 x 轴旋转,说明 y 和 z 都是在进行旋转的,但 x 不变。因此绕 x 轴的旋转矩阵相比二维的旋转矩阵,第一行是不变的。中间部分和二维旋转矩阵一样。
绕 y 轴旋转不一样,这里涉及到我们要如何思考轴的相互顺序。
根据右手螺旋定则,x 叉乘 y 得到 z,y 叉乘 z 得到 x。但 z 叉乘 x 才能得到 y,是反的,因此 Ry 部分不一样。
我们能够解决一些简单的问题,复杂的问题可以转化成一些简单问题的组合。
给定根据三个轴的旋转,能否将某一个方向旋转到任意一个方向上去?
Rotation by angle α round axis n
Rodrigues' Rotation Formula
有人将任意一个旋转分解成通过 x y z 轴分别做旋转。
证明过程可以参考闫令琪老师的证明:
公式给了我们一个旋转矩阵,定义中给了我们一个旋转轴 n 和旋转角度 α。旋转角度好理解,但旋转轴似乎不能这么简单地定义。因为一个旋转轴首先跟起点有关系,然后跟方向有关系,只给一个向量是不是不太合适?
假如说沿着 y 轴旋转,跟沿着 和 各等于 1 并且也是沿着 y 方向的向量。方向一样,但起点不一样,结果肯定也是不一样的。因此我们说沿着某个轴的方向旋转,就默认了是过原点的,这样起点就在原点上,方向就是 方向。
那么如果轴 n 可以平移怎么办?那么我们可以将其进行变换的分解。如果我们要沿着任意轴旋转且轴的起点不在原点,我们可以将所有的东西移到起点为原点的条件下,再旋转,再移回去。
另外公式最后的矩阵有点熟悉,就是向量叉乘的式子: