几何变换
约 491 个字 预计阅读时间 2 分钟
变换
线性代数的几何意义就是空间上的变换,常见的变换有: * 平移(translating) * 缩放(scaling) * 旋转(roration) * 剪切/投影(shearing)
因为正常情况下我们是在三维空间操作,所以引入四维的齐次坐标系,这样可以更加方便地表示出这些变换。
齐次坐标系
齐次坐标系下,一个点的坐标是\((x,y,z,w) \(,如果\)w=0 \(,那么就是一个向量,向量只表示方向,\)w=1\)则表示一个点。这样,我们可以把不同变换都表示出来:
平移
\(\left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack = \left\lbrack \begin{matrix} 1 & 0 & 0 & {T}_{x} \\ 0 & 1 & 0 & {T}_{y} \\ 0 & 0 & 1 & {T}_{z} \\ 0 & 0 & 0 & 1 \end{matrix}\right\rbrack \bullet \left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack\)
缩放
\(\left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack = \left\lbrack \begin{matrix} {S}_{x} & 0 & 0 & 0 \\ 0 & {S}_{y} & 0 & 0 \\ 0 & 0 & {S}_{z} & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right\rbrack \bullet \left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack\)
旋转
如果使用三角函数矩阵表示旋转,固然可以连续乘多个矩阵来达到绕任意轴任意方向旋转的目的,但是这样会很容易导致万向节锁死,而使用四元数(可以看做对于复数的拓展)表示旋转可以有效避免这个问题,但是四元数又不够直观。
绕z轴旋转 \(\left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack = \left\lbrack \begin{matrix} \cos \left( \theta \right) & - \sin \left( \theta \right) & 0 & 0 \\ \sin \left( \theta \right) & \cos \left( \theta \right) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right\rbrack \circ \left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack\)
投影
在x轴方向投影 \(\left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack = \left\lbrack \begin{array}{llll} 1 & a & b & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right\rbrack \bullet \left\lbrack \begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right\rbrack\)