返回
计算机图形学奠基之初:从向量到矩阵变换,入门基础轻松拿下!
前端
2024-02-12 05:42:08
计算机图形学基础:掌握向量与矩阵变换
概述
计算机图形学中,向量和矩阵是理解几何变换的关键概念。通过深入理解这些概念,我们可以轻松驾驭图形世界的运动、旋转和缩放。
向量:表示方向和大小
向量是一种数学对象,用于方向和大小。它们通常用带箭头的字母表示,如 \overrightarrow{a}。向量可以用坐标来表示,例如 (x, y, z)。向量的长度,或大小,由毕达哥拉斯定理计算得出:\|\overrightarrow{a}\| = \sqrt{x^2 + y^2 + z^2}。单位向量是长度为 1 的向量,可通过将向量除以其长度获得:\hat{a} = \frac{\overrightarrow{a}}{\|\overrightarrow{a}\|}。
矩阵:表示线性变换
矩阵是用于表示线性变换的数学对象。它们可以用于平移、旋转和缩放等几何变换。矩阵通常用方括号表示,如 [a_{ij}]_{m \times n},其中 m 是行数,n 是列数,a_{ij} 是元素。矩阵可以通过转置(交换行和列)、乘法和求逆等运算来操作。
变换:移动几何对象
变换是将几何对象从一个位置移动到另一个位置的操作。常见的变换包括:
- 平移变换: 沿向量移动对象
- 旋转变换: 绕轴旋转对象
- 缩放变换: 按比例放大或缩小对象
复合变换:组合动作
复合变换是将多个变换组合在一起执行。例如,我们可以先旋转一个对象,然后再沿一个方向平移它。复合变换的矩阵表示法是各个变换矩阵的乘积。
代码示例:使用 NumPy 进行向量和矩阵操作
import numpy as np
# 向量
v = np.array([1, 2, 3])
print("向量:", v)
print("长度:", np.linalg.norm(v))
print("单位向量:", v / np.linalg.norm(v))
# 矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print("\n矩阵 A:")
print(A)
print("\n矩阵 B:")
print(B)
print("\n转置矩阵 A:")
print(np.transpose(A))
print("\n矩阵乘法 A * B:")
print(np.dot(A, B))
# 变换
# 平移变换矩阵
T = np.array([[1, 0, 0, 1],
[0, 1, 0, 2],
[0, 0, 1, 3],
[0, 0, 0, 1]])
# 应用平移变换
v_translated = np.dot(T, v)
print("\n平移后的向量:", v_translated)
结论
理解向量和矩阵变换是计算机图形学的基础。通过掌握这些概念,我们可以构建复杂而逼真的图形世界。
常见问题解答
-
向量与点的区别是什么?
- 点是位置,而向量是方向和大小。
-
如何计算矩阵的行列式?
- 对于 2x2 矩阵,行列式为 ad - bc;对于更大矩阵,需要使用行列展开或余子式。
-
如何求解矩阵方程组?
- 可以使用高斯消元法或克莱默法则。
-
平移变换和刚体变换有何不同?
- 刚体变换包括平移、旋转和缩放,而平移变换仅涉及移动。
-
复合变换的顺序对结果有影响吗?
- 复合变换的顺序很重要,不同的顺序会产生不同的结果。