微分方程可以分为线性微分方程与非线性微分方程两种。数学家研究得出的结论是,线性微分方程是必然有解的,而非线性微分方程会存在一些无论如何都无法求解的情况。 举一个游戏开发者身边的例子,这个例子涉及流体力学的情况。比如挥动一面旗帜,这时的运动就不能通过简单的函数来表示。在这些情况下,我们就需要使用微分方程的数值解法,即牺牲了一定程度的精确性的数值计算。
1. 欧拉法
通过逐步计算来求得微分方程的近似解。
举例,在运动学中,位置x与速度v之间的关系 dx/dt = v, 在欧拉法中可以近似为Δx/Δt=v, 这里的Δt是时间间隔,在游戏中一般是1/60秒。 将当前的位置表示为Xn, 上一次步长表示为Xn-1,则:
(Xn - Xn-1)/Δt=v, 即Xn = Xn-1 + v*Δt,
同理,速度与加速度之间的关系:
Vn = Vn-1 + a*Δt,
将两个式子并列起来:
这里第一个等式中的v可以直接使用第二个等式中的Vn或Vn-1。
2.龙格-库塔法(Runge-kutta methods)
https://wenku.baidu.com/view/792dc95e312b3169a451a4f8.html#
3. 线性多步法(Linear multistep method).
3.1 Adams-Bashforth方法