Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 22:59
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
  Mit Zitat antworten Zitat