FÜr mich sind beide Rechnungen jedoch schlüssig,
Für mich nicht. Was du im Grunde machst (bzw. versuchst) ist:
E := E - Norm(Speed) * TimeGap
Norm(Speed) ist die Norm des Geschwindigkeitsvektors.
Was du wirklich tust: ich habe die lange Formel mal etwas auseinander gefriemelt:
Code:
sqrt(
abs(
(
(Xspeed*TimeGap)
*
(XSpeed*TimeGap)
)
)
+
abs(
(
(YSpeed*TimeGap)
+
(YSpeed*TimeGap)
)
)
)
Fällt dir was auf? Beim YSpeed*TimeGap steht ein Plus. Das gehört da nicht hin. (Zumindest wären deine Formeln konsistenter wenn dort ein * stehen würde)
Den Betrag kannst du übrigens weglassen. Die Fallunterscheidung auch. Sieht dann so aus:
Delphi-Quellcode:
if Energie > 0 then begin
X := X + (XSpeed * TimeGap * Energie * 10);
Y := Y + (YSpeed * TimeGap * Energie * 10);
//Energie neu berechnen
Energie := Energie - sqrt(Xspeed*XSpeed + YSpeed*YSpeed) * TimeGap;