矩阵变化在图形学的应用

前言

本文重在讲线性代数中矩阵变化对图形变化的作用,将使用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仓库源码:

https://github.com/AlexJakin/python-Matrix-trainformation


 上一篇
中文分词-前向最大匹配算法 中文分词-前向最大匹配算法
引言本文及下篇将讲解中文自然语言处理的第一项核心技术:中文分词技术。中文不同英文,英文句子有天生的分词效果,所以在做中文语言处理的的时候需要做分词。 在语言理解中,词是最小的能够独立活动的有意义的语言成分,将词确定下来是理解自然语言的第一步
2019-09-14
下一篇 
【论文阅读】A Neural Conversational Model 【论文阅读】A Neural Conversational Model
引言人工智能研究领域中对话模型是一个非常热门的话题。聊天机器人可以在各种设置中找到,包括客户服务应用和在线帮助。这些机器人通常由基于检索的模型提供支持,这些输出是某些形式问题预先定义的响应。在像公司IT服务台这样高度受限制的领域中,这些模型
2019-08-20
  目录