拉格朗日动力学详解
从能量、广义坐标到图形学模拟

这份讲义从零开始解释拉格朗日动力学。重点不是背公式,而是理解每个符号为什么出现,以及它如何最终变成布料、弹簧、单摆和机器人在屏幕上的运动。
一 动力学要解决什么问题
动力学研究:已知质量、受力和初始状态,如何求出物体之后的位置和速度。牛顿方法直接写 F=ma;拉格朗日方法先描述系统的动能和势能,再由微积分推导运动方程。两者描述的是同一套物理规律。
二 动能与势能
动能是运动带来的能量:T=1/2 mv²。势能是位置或形变带来的能量,例如重力势能 V=mgh、弹簧势能 V=1/2 kx²。对图形学而言,布料的拉伸、弯曲、重力和碰撞都可以写成势能。

图中蓝线是势能曲线。曲线越陡,势能变化越快;红点所在位置受到的力会指向势能下降的一侧。
三 势能如何产生力
F = − ∂V / ∂x
逐项读:F 是力;V 是势能;x 是位置;∂V/∂x 是势能沿 x 方向的变化率,也就是势能曲线的斜率;负号表示力指向势能降低的方向。势能本身只告诉我们"储存了多少能量",斜率才告诉我们"物体会被推向哪里、推得多强"。
弹簧例子:V(x)=1/2 kx²。求导得到 ∂V/∂x=kx,因此 F=−kx。x>0 时力向左,x<0 时力向右,始终把弹簧拉回自然长度。三维写成 F⃗=−∇V,其中梯度 ∇V 指向势能增加最快的方向。
四 广义坐标 q
q 不一定是普通的 x、y、z,而是描述系统状态最方便的一组变量。单摆用角度 θ,机械臂用关节角,布料用全部顶点位置。好的 q 能把约束直接包含进坐标中。

五 拉格朗日量 L=T−V
L(q, q̇, t) = T(q, q̇, t) − V(q, t)
L 不是总能量。总机械能是 T+V,而拉格朗日量是 T−V。它是一个"生成运动方程的函数":把动能对速度的依赖和势能对位置的依赖放在同一个表达式中。q̇=dq/dt 是广义速度。
六 欧拉 拉格朗日方程逐项解释
d/dt ( ∂L/∂q̇ ) − ∂L/∂q = 0
第一项 ∂L/∂q̇:L 对广义速度的变化率,叫广义动量 p。普通直线运动中它就是 mv。外面的 d/dt:观察这个广义动量随时间如何变化,也就是动量变化率。
第二项 ∂L/∂q:L 对广义位置的变化率。由于 L=T−V,在简单系统中动能不直接依赖位置,于是它等于 −∂V/∂q,正好对应势能产生的广义力。
整条公式可翻译为:广义动量的变化率必须和广义力匹配。等号右边写 0,不表示没有力,而表示惯性项与力项组成的运动方程恰好成立。
七 例子 弹簧振子
T=1/2 m q̇² V=1/2 kq² L=1/2 m q̇²−1/2 kq²
∂L/∂q̇=mq̇ d/dt(∂L/∂q̇)=m q̈ ∂L/∂q=−kq
m q̈ − (−kq)=0 → m q̈ + kq=0
也就是 m q̈=−kq:加速度由弹簧恢复力产生。
八 例子 单摆
取摆角 q=θ。摆球速度为 v=lθ̇,因此 T=1/2 ml²θ̇²;取最低点为零势能,V=mgl(1−cosθ)。
L=1/2 ml²θ̇² − mgl(1−cosθ)
ml²θ̈ + mgl sinθ = 0 → θ̈ + (g/l) sinθ = 0
选择 θ 后,摆长约束自动满足,不需要额外求绳子的拉力。这正是广义坐标的力量。
九 外力 阻尼和约束
有摩擦、阻尼或用户施加的力时:
d/dt(∂L/∂q̇) − ∂L/∂q = Q
Q 是非保守广义力。线性阻尼常写 Q=−c q̇。若有约束 C(q)=0,可引入拉格朗日乘子 λ,得到 Mq̈+∇V+Jᵀλ=f,其中 J=∂C/∂q。λ 表示维持约束所需的约束力。
十 图形学中的统一形式
把所有粒子或网格顶点的位置拼成向量 q,动能写成 T=1/2 q̇ᵀMq,势能写成弹簧、弯曲、重力等能量之和。最终得到:
M q̈ + ∇V(q) = f_external
程序每帧通常执行:根据 q 计算势能;求梯度并取负得到力;加入外力和阻尼;求加速度;用时间积分更新速度和位置。
十一 一页记忆
|----------------------|--------------------|
| 公式 | 人话 |
| T=1/2 mv² | 运动越快,动能越大 |
| V=V(q) | 位置或形变储存的能量 |
| F=−∂V/∂x | 力指向势能下降方向 |
| L=T−V | 把动能和势能组合成生成运动方程的函数 |
| d/dt(∂L/∂q̇)−∂L/∂q=Q | 广义动量变化率等于广义力 |
| M q̈+∇V=f | 图形学里能量驱动的离散动力学 |
如果只记一条主线:选择合适的 q,写出 T 和 V,构造 L=T−V,用欧拉-拉格朗日方程得到运动方程,再用数值积分让它逐帧运动。
十二 具体场景推导 小车与弹簧
现在把前面的公式用于一个可想象、也能直接编程的小场景:一辆质量为 m 的小车在水平轨道上运动,左侧连接弹簧,弹簧刚度为 k,自然长度位置定义为 q=0。忽略摩擦,问题是:小车偏离自然位置后如何运动?

图中 q 是小车相对自然位置的位移。q>0 表示向右拉伸,q<0 表示向左压缩。只用一个坐标 q 就能表示小车所有允许的位置。
第一步 选择坐标
q(t) = 小车相对自然位置的位移
速度是 q̇, 加速度是 q̈。我们不先写弹簧力,而是从能量开始。
第二步 写动能
T = 1/2 m q̇²
小车越重或速度越快,动能越大。这里轨道固定,所以小车只有一个平移自由度。
第三步 写势能
V = 1/2 k q²
q=0 时弹簧处于自然长度,势能最低。偏离越多,势能越高。弹簧势能的零点可选在自然长度处;整体加一个常数不会改变力。
第四步 构造拉格朗日量并求导
L = T − V = 1/2 m q̇² − 1/2 k q²
∂L/∂q̇ = m q̇ → d/dt(∂L/∂q̇) = m q̈
∂L/∂q = −kq
第一项先对速度求偏导,得到广义动量 m q̇;再对时间求导,得到 m q̈。第二项对位置求偏导,得到 −kq。代入欧拉-拉格朗日方程:
m q̈ − (−kq) = 0 → m q̈ + kq = 0
第五步 翻译成运动与程序
整理后 q̈=−(k/m)q。负号说明加速度总是朝向 q=0 的平衡位置。若 q>0,小车向左加速;若 q<0,小车向右加速。它会来回振荡。固有角频率为 ω=√(k/m):质量越大振动越慢,弹簧越硬振动越快。
a = −(k/m)q v_next = v + aΔt q_next = q + v_nextΔt
上面是半隐式 Euler 的更新顺序:先更新速度,再用新速度更新位置。实际游戏还会加入阻尼、碰撞和时间步控制。若阻尼系数为 c,则方程变为 m q̈+c q̇+kq=0,振动会逐渐衰减。
这个例子揭示的通用套路
- **建模:**选能描述自由度的 q。
- **能量:**分别写 T(q,q̇) 和 V(q)。
- **推导:**构造 L=T−V,代入欧拉-拉格朗日方程。
- **计算:**整理成加速度形式,加入外力/阻尼/约束。
- **模拟:**数值积分推进状态,再交给渲染器。
十三 拉格朗日动力学在图形学中的应用
图形学不只要得到一条方程,还要把一个三维模型离散成计算机能更新的状态。统一做法是把所有自由度放入向量 q,把质量放入矩阵 M,把弹性、重力等写成势能 V(q),然后逐帧求解。

1 布料
布料网格的每个顶点位置都属于 q。网格边可以提供拉伸/剪切能,相邻三角形之间可以提供弯曲能,重力提供重力势能。
V(q)=V_stretch+V_shear+V_bend+V_gravity
求 −∇V 得到每个顶点的弹性力和重力,再通过动力学积分更新位置。刚度越高,布料越不容易拉长或弯曲,但系统也越刚性,通常需要更稳定的积分器或更小时间步。碰撞还要阻止布料穿过身体、地面或自身。
2 软体与有限元
软体把体积网格的节点位置放入 q。材料被拉伸、压缩或剪切时产生弹性势能。连续材料能量可写为对物体体积的积分,离散后变成顶点/单元能量之和。
M q̈ + ∇V_elastic(q) = f_external
例如果冻、橡胶、肌肉和可变形物体,都可以沿这条路径建模。有限元负责把材料变形和弹性能量离散到网格单元上;拉格朗日动力学负责将能量转成运动方程。
3 刚体与关节
刚体状态包含平移和旋转。多个刚体通过铰链、球关节或固定连接组成系统时,直接为每个刚体写牛顿方程并处理所有关节力会很繁琐。使用关节角等广义坐标,可以自然描述允许运动;约束乘子或专用约束求解器负责保持关节关系。
M(q)q̈ + C(q,q̇)q̇ + g(q) = τ
这是机器人/多体系统常见形式:M 是质量矩阵,C 项包含速度耦合效应,g 是重力项,τ 是关节驱动力矩。图形学可用于机械臂动画、骨骼驱动和物理角色。
4 角色动画与肌肉驱动
角色骨架的关节角可作为 q,肌肉或控制器施加的力矩作为 Q。拉格朗日模型给出身体对驱动力的响应。实时角色动画常把物理模拟与动画目标结合:物理负责惯性、摆动和接触,动画控制负责动作意图与姿势目标。
5 碰撞、接触与约束
碰撞不是简单的弹性势能问题。常见方法包括约束冲量、互补问题、罚函数、PBD 投影或混合求解。拉格朗日乘子可以表达约束力;数值求解器则负责在离散时间步内让不穿透、关节长度等条件近似成立。
6 为什么实时图形不总是直接解原始方程
真实材料的高刚度会让显式积分不稳定;复杂碰撞也难以仅靠势能处理。工程中会按目标取舍:半隐式 Euler 便宜,隐式方法更稳定,Verlet 常用于粒子/布料,Position Based Dynamics 更强调稳定和可控,Projective Dynamics 通过能量最小化兼顾效率与弹性效果。它们都是把连续动力学变成可计算帧更新的不同策略。
图形学应用的共同结构
状态 q → 能量 V(q) → 力 −∇V → 积分/约束求解 → 新状态 → 渲染
因此,拉格朗日方法在图形学里不是一个孤立公式。它通常和网格离散、碰撞检测、约束求解及数值积分组合。它提供统一的建模语言:系统有哪些自由度、储存哪些能量、受到哪些广义力,以及运动方程是什么。