向量是数学中用于表示方向和量值的工具,广泛应用于物理学、计算机图形学和游戏开发中。
一、向量
1. 基本概念
- 定义:向量是具有大小(模)和方向的量,通常表示为箭头。
- 表示方法:
- 代数表示:v = (x, y)(二维)或 v = (x, y, z)(三维)。
- 几何表示:从起点到终点的箭头。
- 属性:
- 大小(模):向量的长度,记为 v。
- 方向:向量指向的角度或方位。
- 单位向量:模为1的向量,通常用于表示方向。
2. 二维向量
二维向量是平面上的向量,用于表示平面内的位置、位移、速度等。
- 表示:v = (x, y)。
- 计算法则:
- 加法:v1 + v2 = (x1 + x2, y1 + y2)。
- 减法:v1 - v2 = (x1 - x2, y1 - y2)。
- 数乘:k * v = (k * x, k * y)。
- 点积(内积):v1 · v2 = x1 * x2 + y1 * y2。
- 几何意义:两向量夹角的余弦值乘以它们的模。
- 叉积(外积):二维向量的叉积结果是一个标量,表示两向量围成的平行四边形的面积。
- v1 × v2 = x1 * y2 - x2 * y1。
- 应用:
- 计算夹角。
- 判断方向(顺时针或逆时针)。
- 投影和反射。
3. 三维向量
三维向量用于表示空间中的位置、位移、速度等,是2D向量的扩展。
- 表示:v = (x, y, z)。
- 计算法则:
- 加法:v1 + v2 = (x1 + x2, y1 + y2, z1 + z2)。
- 减法:v1 - v2 = (x1 - x2, y1 - y2, z1 - z2)。
- 数乘:k * v = (k * x, k * y, k * z)。
- 点积(内积):v1 · v2 = x1 * x2 + y1 * y2 + z1 * z2。
- 几何意义:两向量夹角的余弦值乘以它们的模。
- 叉积(外积):三维向量的叉积结果是一个新的向量,垂直于两向量所在的平面。
- v1 × v2 = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2)。
- 应用:
- 计算法向量。
- 判断方向(左手法则或右手法则)。
- 旋转和力矩。
4. 线性变换
线性变换是将向量从一个空间映射到另一个空间的函数,保持向量的线性关系(加法和数乘)。
- 矩阵表示:线性变换通常用矩阵表示。
- 二维线性变换:2x2矩阵。
- 三维线性变换:3x3矩阵。
- 常见线性变换:
- 缩放:改变向量的大小。
- 旋转:改变向量的方向。
- 投影:将向量投影到某个方向或平面上。
- 剪切:沿某个方向拉伸向量。
- 计算法则:
- 线性变换的加法:T(v1 + v2) = T(v1) + T(v2)。
- 线性变换的数乘:T(k * v) = k * T(v)。
- 应用:
- 图形变换(平移、旋转、缩放)。
- 物理模拟(力、速度、加速度的变换)。
5. 计算法则总结
- 向量加法:分量相加。
- 向量减法:分量相减。
- 数乘:每个分量乘以标量。
- 点积:分量的乘积之和。
- 叉积:二维结果为标量,三维结果为向量。
- 线性变换:通过矩阵操作实现变换。
二、矩阵
1. 基本概念
- 定义:矩阵是一个由数字排列成的矩形数组,通常表示为行和列的集合。
- 示例:2x2 矩阵: \(\begin{pmatrix} a & b \\ c & d \end{pmatrix}\) 3x3 矩阵: \(\begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix}\)
- 维度:矩阵的维度由其行数和列数表示,如 m x n(m 行 n 列)。
- 向量作为矩阵:
- 二维向量可以表示为 2x1 矩阵: \(\begin{pmatrix} x \\ y \end{pmatrix}\)
- 三维向量可以表示为 3x1 矩阵: \(\begin{pmatrix} x \\ y \\ z \end{pmatrix}\)
2. 矩阵运算
加法
- 定义:两个相同维度的矩阵对应元素相加。
- 示例: \(\begin{pmatrix} a & b \\ c & d \end{pmatrix} + \begin{pmatrix} e & f \\ g & h \end{pmatrix} = \begin{pmatrix} a + e & b + f \\ c + g & d + h \end{pmatrix}\)
数乘
- 定义:矩阵的每个元素乘以一个标量。
- 示例: \(k \times \begin{pmatrix} a & b \\ c & d \end{pmatrix} = \begin{pmatrix} k \cdot a & k \cdot b \\ k \cdot c & k \cdot d \end{pmatrix}\)
矩阵乘法
- 定义:矩阵乘法是线性变换的核心运算,结果矩阵的行数是第一个矩阵的行数,列数是第二个矩阵的列数。
- 规则:设 A 是 m x n 矩阵,B 是 n x p 矩阵,则 C = A × B 是 m x p 矩阵。 \(C_{i,j} = \sum_{k=1}^{n} A_{i,k} \cdot B_{k,j}\)
- 示例: \(\begin{pmatrix} a & b \\ c & d \end{pmatrix} \times \begin{pmatrix} e & f \\ g & h \end{pmatrix} = \begin{pmatrix} a \cdot e + b \cdot g & a \cdot f + b \cdot h \\ c \cdot e + d \cdot g & c \cdot f + d \cdot h \end{pmatrix}\)
转置
- 定义:将矩阵的行与列互换。
- 示例: \(\begin{pmatrix} a & b \\ c & d \end{pmatrix}^T = \begin{pmatrix} a & c \\ b & d \end{pmatrix}\)
逆矩阵
- 定义:对于方阵 A,如果存在矩阵 B 使得 A × B = I(单位矩阵),则 B 称为 A 的逆矩阵,记为 $A^{-1}$。
- 应用:解决线性方程组、变换的反向计算。
3. 矩阵与线性变换
- 矩阵表示线性变换:任何线性变换都可以用一个矩阵表示。
- 缩放矩阵: \(\begin{pmatrix} s_x & 0 \\ 0 & s_y \end{pmatrix}\)
- 旋转矩阵(2D,角度 θ): \(\begin{pmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{pmatrix}\)
- 剪切矩阵: \(\begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix}\)
- 变换叠加:多个线性变换可以通过矩阵相乘叠加。
4. 矩阵在2D/3D游戏开发中的应用
2D 应用
- 物体变换:
- 平移:使用齐次坐标和 3x3 矩阵表示。
- 旋转:2D 旋转矩阵。
- 缩放:缩放矩阵。
- 碰撞检测:利用矩阵表示边界区域。
- 相机变换:将世界坐标转换为屏幕坐标。
3D 应用
- 物体变换:
- 平移、旋转、缩放:使用 4x4 矩阵(齐次坐标)。
- 投影变换:
- 透视投影和正交投影。
- 光照计算:通过矩阵表示法向量和光线方向。
- 相机控制:视图矩阵和投影矩阵结合。