Verlet integration (tsz. Verlet integrations)
A Verlet-integráció egy numerikus módszer, amelyet gyakran használnak fizikai szimulációkhoz, például bolygók mozgásához, molekuláris dinamikához, és játékokban a karakterek vagy tárgyak mozgásának szimulációjához.
A másodrendű mozgásegyenletek megoldására szolgál, és az alábbi képleten alapul:
ahol: - a jelenlegi pozíció, - az előző időpontbeli pozíció, - az adott pillanatban ható gyorsulás, - az időlépés.
A fő előnye az, hogy nincs szükség sebesség tárolására, mert a pozíciók alapján lehet számolni.
Ez a program egy tömegpontot szimulál, amelyet a gravitációs erő mozgat.
#include <iostream>
#include <cmath>
using namespace std;
// Gravitációs gyorsulás (m/s^2)
const double g = 9.81;
// Időlépés
const double dt = 0.01;
// Szimuláció hossza (másodpercben)
const double simTime = 2.0;
int main() {
// Kezdeti feltételek
double x_prev = 0.0; // Kezdeti helyzet t-dt-nél (előző időpont)
double x = 10.0; // Kezdeti helyzet t=0-nál (magasság 10m)
double a = -g; // Csak a gravitáció hat
// Szimuláció
for (double t = 0; t < simTime; t += dt) {
// Verlet-integráció új pozíció számításához
double x_new = 2 * x - x_prev + a * dt * dt;
// Kiírás konzolra
cout << "Idő: " << t << "s, Pozíció: " << x << "m" << endl;
// Frissítés a következő lépéshez
x_prev = x;
x = x_new;
}
return 0;
}
Idő: 0s, Pozíció: 10m Idő: 0.01s, Pozíció: 9.99902m Idő: 0.02s, Pozíció: 9.99608m ... Idő: 1.98s, Pozíció: 0.199m Idő: 1.99s, Pozíció: 0.0981m
Ez azt mutatja, hogy az objektum szabadesésben gyorsulva mozog lefelé.
✔ Pontosabb, mint az Euler-módszer: Mivel közvetlenül a második deriváltból (gyorsulásból) számítunk, kevesebb numerikus hiba keletkezik.
✔ Nincs szükség sebesség tárolására, mert a pozíciók közvetlenül elegendő információt adnak.
✔ Játékfejlesztésben és fizikában is gyakori, pl. csontfizika, molekuláris dinamika, gravitációs szimulációk.