计算机图形学实验五-二维图像几何变换
这个内容其实非常简单,就不同变换改一下矩阵就行,但是我这里想讲的是,如何去理解他的本质,就为什么左乘一个矩阵就可以实现这种变换,矩阵到底是什么,这些问题其实应该在学线性代数的时候就该解决的,如果会的话那就没啥看的了,然后推荐大家去看3b1b的关于线代的视频,讲的非常好,搭配着动画演示很好理解,并且时间也不长,视频地址
关于几何变换的讲解都在视频里了,如果你不在意这些的话,那其实这次实验就没啥说的,我就把我写的实验报告放着就行了,因为真的没啥说的,就不同变换套不同的矩阵就行
引入齐次坐标
齐次坐标简单的说就是用n+1维矢量表示n维矢量,之所以这么做是因为平移这种变换不是线性变换,无法用二维矩阵去表示二维的非线性变换,而要注意的是
[
X
Y
0
]
[
X
Y
W
]
\begin{bmatrix} X\\ Y\\ 0 \end{bmatrix} \begin{bmatrix} X\\ Y\\ W \end{bmatrix}
⎣⎡XY0⎦⎤⎣⎡XYW⎦⎤
左边这种第三维是0的表示的是向量,而非0的表示的是点,之所以这么设置有很多原因,比如如果你带入物理角度的向量,也就是向量只和方向和长度有关的话就会发现向量无论怎么平移还是原来那个向量,所以向量进行平移后还应该是这个样子,而为什么第三维是0就满足这样我在下面具体讲到了再说,还有一个更好理解的就是向量加向量应该还是向量,所以第三维0+0还是0,而非0则就是点,点减去点则是向量,比如
你会发现点减去点就变成了向量,就这么设置是有意义的,有很多原因,如果不理解你只需要认为他是正确的而且方便就行
平移
那刚刚也说了平移是非线性变换,而视频里也说了去看变换只需要去看基的变换就行,那经过平移变换后原点肯定就会发生改变,而线性变换就是**”保持网格线平行且等距分布,并且保持原点不变“**,你也可以这么想,一个二维空间你怎么平移变换还是那个空间,所以我们想去平移变换他只能升一个维度,去表示平移,因此引入了齐次坐标系。
那我们接下来去想象平移变换,基应该怎样去变换,我们想象一个三维坐标系,基是这样的,也就是单位矩阵
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{bmatrix} ⎣⎡100010001⎦⎤
如果只改变i,j基向量也就是保持k或者说z轴不变,那在空间上就是一个在纵轴为1的一个二维平面,那我们接下来去移动k基向量,也就是在X轴上移动x个单位
图很丑自己想想一下吧,就是k基向量往x轴倾斜了,那整个空间也会随着倾斜,如果还是关注那个Z轴上单位1的那个二维平面好像并没有变换,但实际上因为空间上的倾斜,那个二维平面也随之倾斜,二维平面上的向量就相当于发生了平移,这只是基向量X方向变换Y方向也是可以的,那把变换后的基向量写下来就会发现平移变换矩阵就是
[
1
0
t
x
0
1
t
y
0
0
1
]
\begin{bmatrix} 1&0&tx\\ 0&1&ty\\ 0&0&1 \end{bmatrix}
⎣⎡100010txty1⎦⎤
这个就是向量平移的矩阵
缩放
缩放是线性变换那就很简单的,只需要关注二维就行,基向量咋变空间也会随着变换,缩放变化矩阵就是
[
t
x
0
0
0
t
y
0
0
0
1
]
\begin{bmatrix} tx&0&0\\ 0&ty&0\\ 0&0&1 \end{bmatrix}
⎣⎡tx000ty0001⎦⎤
这个就是x方向缩放tx倍,y方向缩放ty倍
旋转
旋转也是线性变换,具体讲解我在视频说了就不说了
[
cos
β
−
sin
β
0
sin
β
cos
β
0
0
0
1
]
\begin{bmatrix} \cos\beta&-\sin\beta&0\\ \sin\beta&\cos\beta&0\\ 0&0&1 \end{bmatrix}
⎣⎡cosβsinβ0−sinβcosβ0001⎦⎤
反射就是旋转而且还更简单都不需要三角函数
错切
线性变换,就相当于一个基向量不变另一个变
[
1
a
0
b
1
0
0
0
1
]
\begin{bmatrix} 1&a&0\\ b&1&0\\ 0&0&1 \end{bmatrix}
⎣⎡1b0a10001⎦⎤
你要是看了视频理解了真的就是没啥说的就是看改变后的基向量就行
复合变换
看了视频理解的话,那就相当于就是几个变换矩阵左乘下去就行了。。