Also ich würde da so rangehen:
1. Definiere einen record:
Delphi-Quellcode:
TVector = record
X, Y: Double;
end;
Damit können wir dann rechnen
2. Schreibe Methoden zum Rechnen:
Delphi-Quellcode:
function Add(a, b:TVector):TVector;
begin
Result.X := a.X + b.X;
Result.Y := a.Y + b.Y;
end;
function Mult(a:TVector; b: Double):TVector;
begin
Result.X := a.X * b;
Result.Y := a.Y * b;
end;
function Drehen(betrag, phi: Double):TVector;
begin
Result.X := betrag * cos(phi);
Result.Y := betrag * sin(phi);
end;
Und dann kommt der interessante Teil: Das Flugzeug
Benötigte Variablen:
Position, Velocity, Acceleration, F_S, F_R, F_A : TVector;
sowie
Angle, Masse, Grav, Schub, Reibung, Auftrieb: Double;
Am Anfang initialisieren wir das ganze:
Delphi-Quellcode:
Schub := 20; // Das was du bis jetzt als Speed hast ;-)
Position := // Deine Anfangsposition
Grav := -3; // eigentlich -9.81 aber das ist so schnell
Masse := 1000; // Musste mal ausprobieren
Angle := 0; // Der Winkel ist erstmal im Bogenmaß!
Und dann in der Step-Methode (oder wie die heißt, die mit dem TimeGap eben)
Delphi-Quellcode:
var
F_res:TVector;
begin
Reibung := -0.1 * Velocity.X * Velocity.X * Velocity.Y * Velocity.Y; // Reibung prop. zum Quadrat der Geschw.
Auftrieb := 0.2 * Velocity.X * Velocity.X * Velocity.Y * Velocity.Y; // Auftrieb ebenfalls.
F_S := Drehen(Schub, Angle);
F_R := Drehen(Reibung, Angle);
F_A := Drehen(Auftrieb, Angle + Pi/2);
Acceleration := Mult(Add(F_A, Add(F_S, F_R)), 1/Masse); // a = F/m
Acceleration.Y := Acceleration.Y + Grav;
Velocity := Add(Velocity, Mult(Acceleration, TimeGap));
Position := Add(Position, Add(Mult(Velocity, TimeGap), Mult(Acceleration, -0.5*TimeGap*TimeGap)))
// s := s + vt - 1/2*a*t^2
// Jetzt hast du in Position.X und Position.Y deine Koordinaten ;-)
So in etwa. Man muss wahrscheinlich noch an den Konstanten herumspielen, damit das funktioniert ...
P.S.: Es würde mich wundern, wenn du alles verstanden hast, als frag' ruhig