数学工具
向量
向量是物理引擎中最基本的数据结构,用于表示具有大小和方向的物理量,如位置、速度和力。一个三维向量通常表示为 。
核心的向量运算包括:
点积在物理引擎中的常见应用包括:计算两个向量之间的夹角、判断两个向量是否正交(点积为零)、计算一个向量在某方向上的分量。
叉积很多地方会使用,例如和角动量等物理量时至关重要。
3x3旋转矩阵
3x3矩阵主要用于表示旋转和惯性张量。一个绕任意轴旋转角度的旋转矩阵,可以用罗德里格斯公式(Rodrigues’ Rotation Formula)表示:
其中是向量的反对称矩阵(Skew-Symmetric Matrix):
旋转矩阵具有正交性,即,且行列式为1。
4x4变换矩阵
4x4矩阵用于表示一个完整的仿射变换,包含旋转和平移。其一般形式为:
其中是3x3旋转矩阵,是平移向量。这种矩阵在与图形API(如OpenGL或Direct3D)交互时尤其有用,因为它可以直接传递给着色器来变换顶点。
四元数(Quaternions)
虽然旋转矩阵可以表示旋转,但在实际应用中,直接使用矩阵进行旋转插值或连续旋转累加会遇到问题,例如万向锁(Gimbal Lock)。四元数,提供了一种更优雅、更高效的旋转表示方法。
一个四元数可以写为
或简写为 其中是标量部分,是向量部分。
一个绕单位轴旋转角度的旋转可以用单位四元数表示为:
使用四元数旋转一个向量的公式为:
其中被视为纯四元数,是的逆。对于单位四元数,其逆等于共轭。
惯性张量
对于点质量,惯性由标量质量描述。但对于具有体积和形状的刚体(Rigid Body),其对旋转运动的“阻力”不仅取决于质量,还取决于质量如何围绕旋转轴分布。这种分布特性由一个3x3的对称矩阵——惯性张量来描述。
惯性张量的一般形式为:
其中对角线元素是转动惯量(Moments of Inertia),非对角线元素是惯性积(Products of Inertia)。对于连续质量分布,这些元素的定义为:
惯性张量建立了角动量()和角速度()之间的线性关系:
它也出现在旋转动力学的牛顿第二定律的旋转版本中(欧拉方程):
在物体的主轴(Principal Axes)坐标系下,惯性张量可以简化为一个对角矩阵:
其中 , , 是主转动惯量。计算和正确使用惯性张量是实现逼真刚体旋转动力学的关键。物理引擎通常会提供自动计算常见几何形状(如球体、长方体、圆柱体)惯性张量的功能。