旋转
-
旋转默认是(0, 0)为中心, 逆时针
-
公式推导
假设这样一个正方形来逆时针旋转一个角度, 我们从特殊点出发, 比如(1, 0)
我们可以知道它的边长不会改变, 现在它的位置是(cos θ \theta θ, sin θ \theta θ), 所以对于这两个坐标可以写一个等式
同理可以得到B和D的值
为什么有齐次坐标
而且这不是线性变换, 就不是一个矩阵可以解决的了
增加一个维度就行了, 但是注意这里二维点增加的是1, 2维向量增加的是0
注意上面的是点, 不是向量
为什么会这样呢? 因为向量具有平移不变性,所以你对向量平移就是nothing, 哈哈哈, 所以就是0
下面讲一些好玩的事
- 首先看第三点, 就理解成一个点沿着向量移动到末尾, 还是一个点,
- 第四点假如两个点加起来第三维成了2了, 这个怎么看?这里有定义的扩充:
那么在这种定义下,一个点加另一个点表示的就是中点
- 现在可以写成一个统一的形式
变换的分解
- 对于一个复杂的变换, 变换的顺序是很重要的
- 注意向量的应用顺序, 是逐渐从右到左
假如是绕着一个点c而不是原点进行旋转呢?
-
假设一个点左边是(c,c), 先把它左边减去c, 变到(0, 0) 的位置上, 然后再进行旋转, 再平移c到(c, c)
-
注意上面的乘的顺序
3D变换
- 首先类比二维的齐次坐标, 点最后的坐标是1, 向量是0
- 不等于1的时候除去w
- 现在的变换矩阵就是(4*4) 了, 最后一行还是(0, 0, 0, 1)
逆变换
等价于乘变换矩阵的逆矩阵
- 从下面的图可以看出来, 我顺时针旋转的变换矩阵就等于逆时针旋转的逆矩阵
3D绕轴旋转
-
这可能是3维旋转中最复杂的东西了, 因为有好几个轴的旋转
-
坐标系的定义(右手直角坐标系)
这里用右手四指从x出发绕到y, z指的方向就是大拇指的方向, 所以是右手坐标系
- 定义好了坐标系之后可以先看绕x的逆时针旋转:
- 同理有绕着y轴的逆时针旋转(这个不太一样):
- 绕z轴逆时针:
会发现这里有些不同, 就是绕y轴旋转的时候对z的变换是正的 sin α \alpha α , 这是为什么呢?
- xyz是3个顺序排列的, x叉乘y得到z, y叉乘z得到x, 但是x叉乘z得到的是-y, z叉乘x得到的才是y
- 所以绕着y轴逆时针旋转其实可以看成是绕着y轴顺时针旋转
3D一般性旋转
- 对于飞机来说, 在它直行的时候可以有如图三种旋转, 所以可以把复杂的旋转分解开来, 分解到轴上的角度叫做欧拉角
Rodrigues’ ROtation Formula
- 罗德里格斯公式定义了旋转轴 n和旋转角, 注意这里默认的轴的起点都是两个为0, 一个方向为1, 不存在有别的起点的情况