前言
本文重在讲线性代数中矩阵变化对图形变化的作用,将使用python来实现,这里的矩阵类Matrix是自己实现的类,也可以实现numpy的矩阵类
矩阵变化对图形变化的作用
1.缩放
1.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
a & 0\\
0 & b\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
ax \\
by \\
\end{bmatrix}
$$
2.1 代码实现
# 形状为大F的图像
points = [
[0, 0], [0, 5], [3, 5],
[3, 4], [1, 4], [1, 3],
[2, 3], [2, 2], [1, 2], [1, 0]
]
P = Matrix(points)
T = Matrix([[2, 0], [0, 1.5]])
P2 = T.dot(P.T())
2. 沿x轴翻转
2.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
1 & 0\\
0 & -1\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
x \\
-y \\
\end{bmatrix}
$$
2.2代码实现
T = Matrix([[1, 0], [0, -1]])
P2 = T.dot(P.T())
3. 沿y轴翻转
3.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
-1 & 0\\
0 & 1\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
-x \\
y \\
\end{bmatrix}
$$
3.2代码实现
T = Matrix([[1, 0], [0, -1]])
P2 = T.dot(P.T())
4. 沿x轴错切
4.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
1 & a\\
0 & 1\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
ay+x \\
y \\
\end{bmatrix}
$$
4.2代码实现
T = Matrix([[-1, 0], [0, 1]])
P2 = T.dot(P.T())
5. 沿y轴错切
5.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
1 & 0\\
b & 1\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
x \\
bx+y \\
\end{bmatrix}
$$
5.2代码实现
T = Matrix([[1, 0], [0.5, 1]])
P2 = T.dot(P.T())
6. 关于原点翻转
6.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
-1 & 0\\
b & -1\\
\end{bmatrix}
$$
则有:
$$
T *
\begin{bmatrix}
x \\
y \\
\end{bmatrix}
=
\begin{bmatrix}
x \\
bx+y \\
\end{bmatrix}
$$
6.2代码实现
T = Matrix([[-1, 0], [0, -1]])
P2 = T.dot(P.T())
7. 沿θ角旋转
7.1.数学原理
数学原理:
已知变化矩阵T为:
$$
T =
\begin{bmatrix}
cosθ & sinθ\\
-sinθ & cosθ\\
\end{bmatrix}
$$
7.2代码实现
theta = math.pi / 3
# T = Matrix([[math.cos(theta), math.sin(theta)], [-math.sin(theta), math.cos(theta)]])
P2 = T.dot(P.T())
github源码
这里我附上我的github仓库源码: