物理运动模拟基础

牛顿定律

第一定律:若物体所受外力为0,则物体保持静止或匀速直线运动

第二定律:物体的动量随时间的变化率与受力成正比。 F = d p d t = m d v d t = m a F=\frac{dp}{dt}=\frac{mdv}{dt}=ma F=dtdp=dtmdv=ma,一般物理模拟使用这个公式

第三定律:相互作用的两个物体之间的作用力和反作用力大小想等,方向相反,作用在同一直线上。

匀加速运动

设物体的质量为m,初始速度为v0,当前速度为v,时间为t,加速度为a,位置x,运动的距离为s。则有:

速度是位置的变换率: v = d x d t v=\frac{dx}{dt} v=dtdx

加速度是速度的变换率: a = d v d t = d 2 x d t 2 a=\frac{dv}{dt}=\frac{d^2x}{dt^2} a=dtdv=dt2d2x

相反,位置是速度对时间的积分: x = ∫ v d t x=\int{vdt} x=vdt

速度是加速度对时间的积分: v = ∫ a d t v=\int{adt} v=adt
v = ∫ a d t = a t + c , 因为初速度为 v 0 , v = v 0 + a t x = ∫ v d t = ∫ ( v 0 + a t ) d t = ∫ v 0 d t + ∫ a t d t = v 0 t + 1 2 a t 2 + c , c 为初始位置 x 0 x = x 0 + v 0 t + 1 2 a t 2 所以,通过求解速度对时间的积分,我们就可以已知 x 0 求出 x v=\int{adt}=at+c,因为初速度为v_0,v=v_0+at \\ x=\int{vdt}=\int{(v_0+at)dt}=\int{v_0dt}+\int{atdt}=v_0t+\frac{1}{2}at^2+c,c为初始位置x_0 \\ x=x_0+v_0t+\frac{1}{2}at^2 \\ 所以,通过求解速度对时间的积分,我们就可以已知x_0求出x v=adt=at+c,因为初速度为v0,v=v0+atx=vdt=(v0+at)dt=v0dt+atdt=v0t+21at2+c,c为初始位置x0x=x0+v0t+21at2所以,通过求解速度对时间的积分,我们就可以已知x0求出x
对于非匀加速运动,我们可以将物体在极短时间内的运动看作匀加速运动。假设物体当前的速度为v1,位置为x1,经过极短的时间dt,如果我们知道物体的受力,就可以求出物体的加速度,根据上面的计算,就可以求出x2

数值积分方法

当我们将物体在极短时间的运动看作是匀加速运动时,这个极短的时间必须非常小,无限小。但在游戏中,我们每帧的时间可能为30ms,离无限小差很远的,所以是无法准确模拟现实的。我们会采取一些数值积分的方法来达到近似的效果。

欧拉积分方法

注意和欧拉积分区别,欧拉积分方法的公式如下
v n + 1 = v n + a n d t x n + 1 = x n + v n d t v_{n+1}=v_{n} + a_ndt \\ x_{n+1}=x_n+v_ndt vn+1=vn+andtxn+1=xn+vndt
注意公式是用的 v n d t v_ndt vndt,使用的是开始速度,我们也可以使用结束速度 v n + 1 d t v_{n+1}dt vn+1dt,或平均速度 v n + v n + 1 2 d t \frac{v_n+v_{n+1}}{2}dt 2vn+vn+1dt,让我们处理下上面计算出来的公式
x n + 1 = x n + v n d t + 1 2 a n d t 2 设 d v = v n − 1 − v n = a n d t , 则 x n + 1 = x n + v n d t + 1 2 d v d t = x n + ( v n + 1 2 d v ) d t = x n + v n + v n + 1 2 d t x_{n+1}=x_n+v_ndt+\frac{1}{2}a_ndt^2 \\ 设dv = v_{n-1}-vn=a_ndt,则 \\ x_{n+1}=x_n+v_ndt+\frac{1}{2}dvdt=x_n+(v_n+\frac{1}{2}dv)dt=x_n+\frac{v_n+v_{n+1}}{2}dt xn+1=xn+vndt+21andt2dv=vn1vn=andt,xn+1=xn+vndt+21dvdt=xn+(vn+21dv)dt=xn+2vn+vn+1dt
所以欧拉积分方法采用平均速度较开始速度和平均速度精度高。

已知物体的质量为m,当前的位置为x1,速度为v1,求dt时间后物体的位置x2,速度v2
我们可以先分析物体的受力,求出物体的合力 F ,根据牛顿第二定律 a = F m , 则 v 2 = v 1 + a d t x 2 = x 1 + v 1 + v 2 2 d t 我们可以先分析物体的受力,求出物体的合力F,根据牛顿第二定律a=\frac{F}{m},则 \\ v_2=v_1+adt \\ x_2=x_1+\frac{v_1+v_2}{2}dt 我们可以先分析物体的受力,求出物体的合力F,根据牛顿第二定律a=mF,v2=v1+adtx2=x1+2v1+v2dt
在下一帧的时候,我们已知x2和v2,就可以求出x3,v3,以此类推,就可以求出整个运动轨迹了。

韦尔莱积分方法

泰勒级数可以将一个函数f(x)在某个值x=a附近进行展开,
f ( x ) = ∑ n = 0 ∞ f ( n ) ( a ) n ! ( x − a ) n 设 Δ x = x − a ,则上式可以写成 f ( x + Δ x ) = ∑ n = 0 ∞ f ( n ) ( x ) n ! Δ x n f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 + 1 6 f ′ ′ ′ ( x ) Δ x 3 + ⋅ ⋅ ⋅ f(x)=\sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n \\ 设\Delta x = x-a,则上式可以写成 \\ f(x+\Delta x)=\sum_{n=0}^{\infty} \frac{f^{(n)}(x)}{n!} \Delta x^n \\ f(x+ \Delta x)=f(x)+f'(x)\Delta x + \frac{1}{2}f''(x)\Delta x^2 + \frac{1}{6}f'''(x)\Delta x^3 + \cdot \cdot \cdot f(x)=n=0n!f(n)(a)(xa)nΔx=xa,则上式可以写成f(x+Δx)=n=0n!f(n)(x)Δxnf(x+Δx)=f(x)+f(x)Δx+21f′′(x)Δx2+61f′′′(x)Δx3+
回到问题,在dt的时间内,我们无法知道位置的准确路径,但是我们仍可以用一个方程来表示它,设为方程x=f(t),使用泰勒级数展开
f ( t + Δ t ) = f ( t ) + f ′ ( t ) Δ t + 1 2 f ′ ′ ( t ) Δ t 2 + 1 6 f ′ ′ ′ ( t ) Δ x 3 + ⋅ ⋅ ⋅ f(t+ \Delta t)=f(t)+f'(t)\Delta t + \frac{1}{2}f''(t)\Delta t^2 + \frac{1}{6}f'''(t)\Delta x^3 + \cdot \cdot \cdot f(t+Δt)=f(t)+f(t)Δt+21f′′(t)Δt2+61f′′′(t)Δx3+
f ′ ( t ) f'(t) f(t)为位置关于时间的导数,但是我们不知道 f ( x ) f(x) f(x)的方程,怎么求倒数呢?由上面可知,位置关于时间的导数是速度。 f ′ ′ ( t ) f''(t) f′′(t)为加速度。

可以明显看到,欧拉积分方法是泰勒级数展开的前两项,导数的最大结束是一阶,所以欧拉积分方法是一阶方法,精度只有前两项。而

韦尔莱积分方法使用了前三项,是二阶方法,精度比欧拉积分方法高。通过上面欧拉积分方法可知,泰勒级数展开的前三项相当于使用了平均速度的欧拉积分方法,那韦尔莱积分方法有什么不同呢?韦尔莱积分方法舍弃了速度,通过前两步,推出后一步。
设有 n , n + 1 , n + 2 三步, a n + 1 为前后两步的平均速度除以时间差 a n + 1 = ( x n + 2 − x n + 1 d t − x n + 1 − x n d t ) / d t , 可以算出 x n + 2 = − x n + 2 x n + 1 + a n + 1 d t 2 设有n,n+1,n+2三步,a_{n+1}为前后两步的平均速度除以时间差 \\ a_{n+1}=(\frac{x_{n+2}-x_{n+1}}{dt}-\frac{x_{n+1}-x_n}{dt})/dt,可以算出 \\ x_{n+2}=-x_n+2x_{n+1}+a_{n+1}dt^2 设有n,n+1,n+2三步,an+1为前后两步的平均速度除以时间差an+1=(dtxn+2xn+1dtxn+1xn)/dt,可以算出xn+2=xn+2xn+1+an+1dt2

你可能感兴趣的:(物理,物理,物理模拟)