0%

【Games 101】Lec 03:变换

Lecture 03: Transformation

二维变换

缩放变换

用矩阵表示,矩阵就叫缩放矩阵

对称变换一下:

复杂一点的

这里的 x 的变换 和 y 是有关系的 x’ = x + ay

旋转变换

推导:

推关系(x’ 和 x)(y’ 和 y):(利用特殊点(1,0)

从上图可以得到:

A = cosθ

C = sinθ

同理,用特殊点(0,1)算出B D

B = -sinθ

D = cosθ

所以可以得到旋转矩阵 Rθ;

记忆:

记图,然后自己推到一下就行!

性质:

旋转矩阵的转置 <=> 旋转矩阵的逆

如果一个 矩阵转置 = 矩阵的逆,则这个矩阵叫做正交矩阵

小结

线性变换:输入坐标 * 矩阵 = 输出坐标

上面的例子统称为线性变换

齐次坐标(统一变换)

为什么?

当我们平移图像的时候,可以发现我们无法用之前的简单的矩阵x向量的形式表示,而是得用下面的表示方法:

所以,平移不属于线性变换

但是我们不想要它特殊,所以引入了齐次坐标用于表示各种变换

怎么做?

首先,用三个数来表示一个二维向量

相当于就是把二维变成三维,然后用特殊的数字去表示三维

  • 点:第三维是 1
  • 向量:第三维是 0

这样就能通过齐次坐标的方式,把所有的变换都表示成 矩阵 x 向量 的形式;

为什么向量第三维是 0 ?

这么做是为了保证向量的平移不变性;

同时保证了在一些运算下仍然是正确的;

在齐次坐标下:point1 + point2 = point 1 2 的中点

(x1,y1,w)转置 + (x2,y2,w)转置

=> ( (x1+x2) , (y1+y2) , 2w )转置

=> ( (x1+x2)/2w , (y1+y2)/2w , 1)

小结

仿射变换:

齐次变换:

注意到,在表示二维坐标的仿射变换中,齐次变换矩阵的最后一行都是(0,0,1)

注意是有条件的,二维坐标,仿射变换.

验证:(缩放,旋转,平移)

逆变换

要变换回来,则乘以变换矩阵的逆矩阵

变换组合

首先规定,这里默认的旋转是 以0,0为中心,逆时针 旋转的;

变换的顺序很重要;

变换组合 其实本质上就是对应着 矩阵的乘法!!!

当矩阵乘法的顺序不同,得到的变换结果也是不同的。

举个例子

在这个变换中,我们需要先旋转45度,再平移;

那么对应的数学结果就是:

总结:

我们按照变换的顺序,在原向量的基础上,往原向量的左边,从右往左依次乘上变换矩阵

值得注意的是:矩阵乘法有结合律!

变换的分解

三维变换

同理,在三维变换中,也有平移这样的非线性变换操作;

所以继续引入齐次坐标;

用四个数去表示三维空间;

三维变成四维,第四维度取特殊值;

  • 描述,最后一维为1;
  • 描述向量,最后一维为0;

当 w != 0 时,齐次坐标下的点 (x , y, z , w) , 则表示三维空间中的点 (x/w , y/w , z/w)

将 x y z 都 /w 就可以表示成三维空间中的点了!

同样的,在描述三维空间中的反射变换时,变换矩阵的最后一行是(0,0,0,1);

平移操作还是体现在最后一列;

值得注意的是 :

当我们写出齐次坐标的时候,它表示的其实是:
先线性变换,在进行平移

具体的变换 :

这里注意一下绕y轴为啥是反的?这个和轴的顺序和右手螺旋定则有关;

补充

任意一个3D的旋转,都可以分解为分别绕x y z轴旋转;

a β γ 称为欧拉角

Rodrigues’ 旋转公式

就是能把任意一个旋转分解为绕 x y z 的旋转:

n向量:旋转轴(可以理解为一个方向向量,且规定n过原点)

a:旋转角度

推导

扩展 :

四元数 : 主要用于两个旋转之间的插值

欢迎关注我的其它发布渠道