Newtonian Gravity with Velocity Verlet and OpenGL (2016)
compphys.go.ro
compphys.go.ro
Those are mathematically equivalent methods though...aren't they?
v <- v + a(x)dt
x <- x + vdt
With Euler initialisation this is equivalent to: v <- v + a(x)dt/2
x <- x + vdt
v <- v + a(x)dt/2
(consider a sequence of steps: we'll have two v <- v + a(x)dt/2 updates next to each other, which gives v <- v + a(x)dt)This is exactly the same as velocity verlet, if you substitute the value for v computed in the first update into the next two equations:
x <- x + (v + a(x)dt/2)dt
v <- (v + a(x_prev)dt/2) + a(x)dt/2 x += v*dt/2
v += a(x)*dt
x += v*dt/2
This gives you the x,v at the same time, yet still doesn't require storing the accelerations. The acceleration calculation can imperatively update v :)In fact, if you call that update leapfrog(dt), then you can get a fourth order symplectic method like so:
leapfrog(c1*dt)
leapfrog(c2*dt)
leapfrog(c1*dt)
Where c1,c2 are particular coefficients which you have to ask Yoshida.