Für ein Spiel wird man mit den Formeln nicht viel anfangen können. Es sei denn, man will z.B. berechnen, wohin man zielen muss, um irgendein Ziel zu treffen. Wenn man aber nur die Flugbahn des Geschosses bestimmen will, dann geht das iterativ viel besser.
Einfach folgendes in jedem Update tun (wobei dt die Dauer eines Update-Ticks ist, und zwar in Sekunden, z.B. 0.02, wenn du 50-mal pro Sekunde updatest):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
Geschoss.Position += dt * Geschoss.Geschwindigkeitsvektor;
Geschoss.Geschwindigkeit.y += dt * 9.81;
// Wenn du noch Reibung haben willst, setze Geschoss.Reibung
// auf einen Wert nahe 1, z.B. 0.99. Dann verliert das Geschoss
// pro Sekunde 1% seiner Geschwindigkeit.
Geschoss.Geschwindigkeit *= pow(Geschoss.Reibung, dt);
|
Die Parabel ergibt sich so von ganz allein (wenn die Reibung rausgelassen wird).
Dieses Modell für die Reibung ist zwar wahrscheinlich nicht so realistisch, aber es erreicht zumindest, dass schnellere Objekte mehr Geschwindigkeit verlieren als langsamere. Ich mache das meistens so und fand es bisher immer in Ordnung.