games101学习:lecture3. Transformation

大纲

这周 要学习转换(Transformation),从三维世界到二维投影。

2D转换:rotation(旋转),scale(缩放),shear(切片)

齐次坐标的概念,以及为什么用它

多种不同的变换组合到一块形成一个新的变换

三维的变换

今天 学习二维变幻

1.Representing transformations using matrices 使用矩阵表示变幻

2.rotation scale shear 旋转 缩放 切片

缩放:横轴和纵轴都缩放为原来的0.5倍。

1.一开始任何一个点的坐标是(x,y),经过一个缩放操作之后变为(x',y'),那可以理解为x' = sx y' = sy

,其中s=0.5

2.上面这两个十字也可以写为矩阵形式,x' = sx y' = sy 写为

此时S = 0.5;这个【S 0 0 S】成为缩放矩阵,如果S 大于 1 的话,这个矩阵可以用于放大。

同理,想将图像对x进行缩放,可以进行这个操作。

同理,对称的操作

shear变换,切变。

y轴方向的值不发生改变,y=0的x不发生改变,然后y越大,x改变的越大,因此改变的量是x=ay,加上原本的量是x' = x + ay所以矩阵可以这么写。

写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。

旋转,绕着(0,0)旋转,逆时针为正方向。

那我们如何得到这个变换呢?手推公式一下。

我们知道,写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。那此时我们可以随机找两个点,就比如原图右下角的点和左上角的点。

右下角的(1,0)会变成( cos(theta) , sin(theta) ) 那这个就是一个变换前后的关系,可以通过这个关系去推导这个(A,B,C,D)的值。同理,左上角这个点也会满足。这两个特殊的点满足,其余点也会满足的。

最终可以得出A=cos(theta) B=-sin(theta) C=sin(theta) D=cos(theta)。

还是那句话,写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。

称之为线性变换

引入新概念,以上的线性变换要用一个相同维度的矩阵来乘向量,那不同纬度呢,引入一个定义叫做齐次坐标,Homogeneous coordinates,理解为什么要引入这个定义?因为我们要进行平移变换

看看这个平移变换,貌似挺简单的,但是很难以矩阵相乘的形式表达出来。

如果表示为这种形式不符合线性变换的定义,可以有一种统一的形式:齐次变换

二维的点可以加个1,二维的向量加个0,增加一个维度。(为什么要将向量和点区别对待呢?)

向量考虑的是方向性,其具有平移不变性。

point + point = 这两个点的中点,

可以实现加法,我想要的平移的变换!可以写成统一的一个矩阵 * 一个向量的形式了。

类似这种平移变换,为他起个名字,叫做affine transformations(仿射变换),线性变换的同时再加个平移。

用齐次坐标表示二维的仿射变换,最后一行永远都是 0 0 1,平移一定都是写在最后一列的两个数上。

关于齐次坐标的 缩放 旋转 平移 的总结

Inverse Transform逆变换,进行一个操作乘的矩阵 ,然后将这个操作 反回来所用的这个矩阵 ,这个操作是逆变换,这个矩阵是逆矩阵

需要注意的是,矩阵乘法不符合交换律,意思是你先进行平移变换,在进行旋转变换得到的结果肯定是不等于先进性旋转变换再进行平移变换得到的结果。**你想先进行什么操作,就先左乘一个矩阵,如图,(x,y,1)先进行旋转,再进行平移。

对这个矩阵先进行A1变换,再A2,再A3.........就是一直左乘。

矩阵没有交换律,但是有结合律 那么就可以将这些An ...... A2 A1先乘到一块作为一个矩阵最后再和这个(x,y,1)进行相乘。

前面说到的旋转,都是以原点中心 进行的旋转,那能不能以任意一个点进行旋转呢?变换不仅能进行合成(上面),还能进行分解。

如何以C为中心旋转,首先平移原图C的位置到原点,然后旋转,然后反转回去。

先左乘一个平移,再旋转,再平移。

二维的讲完了,到了三维。

三维空间也需要线性变换,它也需要旋转,缩放,平移等。

w不等于1,那就把x,y,z全都变成x/w,y/w,z/w的值,然后就变成了一个点。

先平移再线性变换还是先线性变换再平移呢?
先线性变换再平移