2D物理效果代码实现思路(1)数学基础

By pocaster

向量是数学中用于表示方向和量值的工具,广泛应用于物理学、计算机图形学和游戏开发中。

一、向量


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 应用

  1. 物体变换
    • 平移:使用齐次坐标和 3x3 矩阵表示。
    • 旋转:2D 旋转矩阵。
    • 缩放:缩放矩阵。
  2. 碰撞检测:利用矩阵表示边界区域。
  3. 相机变换:将世界坐标转换为屏幕坐标。

3D 应用

  1. 物体变换
    • 平移旋转缩放:使用 4x4 矩阵(齐次坐标)。
  2. 投影变换
    • 透视投影和正交投影。
  3. 光照计算:通过矩阵表示法向量和光线方向。
  4. 相机控制:视图矩阵和投影矩阵结合。

Tags: Gamedev Public