计算机图形学入门I
Review of Linear Algebra & Transformation
Re0:从零开始的线性代数学习:D
一、Review of Linear Algebra
绕了一圈发现教科书才是永远滴神,要用的知识基本都在书上了,这里仅记录一些关键点以及特殊内容
默认情况下使用列向量
$$
\vec a \cdot \vec b =
\begin{pmatrix}
x_a\\
y_a\\
\end{pmatrix}
\cdot
\begin{pmatrix}
x_b\\
y_b\\
\end{pmatrix}x_ax_b+y_ay_b
$$右手螺旋定则(叉积):伸出右手,从$\vec a$旋转到$\vec b$握住,拇指指向的方向即为$\vec a \times \vec b$。同时定义右手系,即xyz遵守右手螺旋定则。
叉积也可以表示为矩阵形式
$$
\vec a \times \vec b =
\begin{pmatrix}
y_az_b-y_bz_a\\
z_ax_b-x_az_b\\
x_ay_b-y_ax_b\\
\end{pmatrix}
$$
$$
即\vec a \times \vec b = A^* b=
\begin{pmatrix}
0 & -z_a & y_a\\
z_a & 0 & -x_a\\
-y_a & x_a & 0\\
\end{pmatrix}
\begin{pmatrix}
x_b\\
y_b\\
z_b\\
\end{pmatrix}
$$
- 利用叉积判断一点是否在三角形内部:该点总在三条边向量的左边或右边(三角形光栅化的基础)
二、Transformation
- 线性变换(Linear Transforms)通过矩阵形式表示如下
$$
x’ = Mx
$$
$$
\begin{bmatrix}
x’\\
y’\\
\end{bmatrix}
=
\begin{bmatrix}
a & b\\
c & d\\
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
\end{bmatrix}
$$
- 缩放(Scale)变换:s为缩放倍数
$$
\begin{bmatrix}
x’\\
y’\\
\end{bmatrix}
=
\begin{bmatrix}
s & 0\\
0 & s\\
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
\end{bmatrix}
$$
- 对称(Reflection)变换
$$
\begin{bmatrix}
x’\\
y’\\
\end{bmatrix}
=
\begin{bmatrix}
-1 & 0\\
0 & 1\\
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
\end{bmatrix}
$$
- 错切(Shear)变换
$$
\begin{bmatrix}
x’\\
y’\\
\end{bmatrix}
=
\begin{bmatrix}
1 & a\\
0 & 1\\
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
\end{bmatrix}
$$
- 旋转(Rotation)变换
$$
\begin{bmatrix}
x’\\
y’\\
\end{bmatrix}
=
\begin{bmatrix}
cos\theta & -sin\theta\\
sin\theta & cos\theta\\
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
\end{bmatrix}
$$
- 引入齐次坐标是为了将所有变换统一为一个矩阵乘以一个向量这样的形式
- 平面上的点 $2D\ point=(x,y,1)^T$
平面上的向量 $2D\ vector=(x,y,0)^T$
那么平移(Translation)变换就可以表示为如下形式
$$
\begin{pmatrix}
x’\\
y’\\
w’\\
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & t_x\\
0 & 1 & t_y\\
0 & 0 & 1\\
\end{pmatrix}
\cdot
\begin{pmatrix}
x\\
y\\
1\\
\end{pmatrix}
=
\begin{pmatrix}
x+t_x\\
y+t_y\\
1\\
\end{pmatrix}
$$
同时上面提到的其他变换也可以类似地用三维方式表示
2. 仿射(Affine)变换
Affine map = linear map + translation
$$
\begin{pmatrix}
x’\\
y’\\
\end{pmatrix} =
\begin{pmatrix}
a & b\\
c & d\\
\end{pmatrix}
\cdot
\begin{pmatrix}
x\\
y\\
\end{pmatrix} +
\begin{pmatrix}
t_x\\
t_y\\
\end{pmatrix}
$$
Using homogenous coordinates:
$$
\begin{pmatrix}
x’\\
y’\\
1\\
\end{pmatrix} =
\begin{pmatrix}
a & b & t_x\\
c & d & t_y\\
0 & 0 & 1\\
\end{pmatrix}
\cdot
\begin{pmatrix}
x\\
y\\
1\\
\end{pmatrix}
$$
逆(Inverse)变换
$$
A’ = M\cdot A
$$
$$
A = M^{-1}\cdot A’
$$
其中$M^{-1}$为$M$的逆矩阵复合(Composite)变换
- 复合变换由一系列简单变换组合完成
- 复合变换需要注意简单变换的顺序
- 举一栗子(实现非原点旋转)
该变换可以分解为①平移c点至原点②完成旋转操作③平移c点至原位置
$$T(c)\cdot R(\alpha)\cdot T(-c)$$
同理可以推广到三维
- $3D\ point =(x,y,z,1)^T$
- $3D\ vector =(x,y,z,0)^T$
$$
\begin{pmatrix}
x’\\
y’\\
z’\\
1\\
\end{pmatrix}\begin{pmatrix}
a & b & c & t_x\\
d & e & f & t_y\\
g & h & i & t_z\\
0 & 0 & 0 & 1\\
\end{pmatrix}
\cdot
\begin{pmatrix}
x\\
y\\
z\\
1\\
\end{pmatrix}
$$