物理引擎中符号和单位
引言
本文为物理引擎系列的开篇,本文详细介绍物理引擎的几个约定:符号、单位、坐标系。
符号约定
标量(Scalar)通常用斜体字母表示,如质量或时间。
向量(Vector)则通常用粗体小写字母,例如, ,。或带箭头的字母,如,,表示。我们将优先采用粗体字母表示向量。
| 物理量 | 标量符号 | 向量符号 | MKS单位 | 描述 |
|---|---|---|---|---|
| 时间 (Time) | - | (秒) | 描述事件发生的时刻或持续时间。 | |
| 质量 (Mass) | - | (千克) | 物体惯性的量度。 | |
| 位置 (Position) | - | 或 | (米) | 物体在世界空间中的坐标。 |
| 位移 (Displacement) | - | (米) | 位置的变化量。 | |
| 速度 (Velocity) | (速率) | 位置随时间的变化率。 | ||
| 加速度 (Acceleration) | 速度随时间的变化率。 | |||
| 力 (Force) | - | (牛顿) | 导致物体加速度的原因。 | |
| 冲量 (Impulse) | - | 力在一段时间上的累积效应。 | ||
| 动量 (Momentum) | - | 物体质量和速度的乘积。 | ||
| 角度 (Angle) | - | (弧度) | 描述物体的朝向或旋转量。 | |
| 角速度 (Angular Velocity) | - | (omega) | 角度随时间的变化率。 | |
| 角加速度 (Angular Acceleration) | - | (alpha) | 角速度随时间的变化率。 | |
| 力矩 (Torque) | - | (tau) | 导致物体角加速度的原因。 | |
| 转动惯量 (Moment of Inertia) | (惯性张量) | 物体对旋转运动的阻力。 |
单位制
绝大多数现代物理引擎,如Box2D和NVIDIA PhysX,都强烈推荐或内部默认使用 MKS单位制,它是国际单位制(SI)的一部分。该系统以米(Meter)、千克(Kilogram)和秒(Second)作为基本单位。所有其他物理量的单位都由这三个基本单位导出,例如力的单位牛顿(N)定义为 kg·m/s²。
右手和左手坐标系
坐标系定义了空间中点的位置和方向,是进行任何几何计算的基础。在3D空间中,主要存在两种手性(Chirality)的坐标系:右手坐标系和左手坐标系。
-
右手坐标系 (Right-Handed System):这是数学和物理学界的标准。你可以用右手来判断:伸出食指指向X轴正方向,中指指向Y轴正方向,那么拇指的指向就是Z轴的正方向。OpenGL、Bullet 和大部分物理引擎都使用右手坐标系。
-
左手坐标系 (Left-Handed System):用左手可以进行类似判断。食指指向X轴正方向,中指指向Y轴正方向,拇指指向Z轴正方向。Direct3D 、 Unity和UE 引擎使用左手坐标系。
两种坐标系之间的转换可以通过反转其中一个轴的坐标来实现。例如,从右手系转换到左手系,可以令 。在混合使用不同坐标系约定的库(例如,使用左手系的渲染引擎和使用右手系的物理引擎)时,必须在数据交换的边界处进行正确的坐标转换。
向上的方向
另一个重要的约定是哪个轴代表“上”方向。最常见的两种约定是:
- Y-Up:Y轴的正方向为“上”。这在2D游戏和许多3D建模软件(如Blender)中很常见。
- Z-Up:Z轴的正方向为“上”。这在建筑和CAD领域以及某些3D引擎(如Unreal Engine)中更为流行。
各种软件,坐标系和向上的约定可以参考Freya总结的图。
