AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2D Physik Problem

Ein Thema von sabbert · begonnen am 10. Aug 2009 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#1

Andorra 2D Physik Problem

  Alt 10. Aug 2009, 16:41
Hallo zusammen,

Bin dabei so eine Art Fun Flugzeug Spiel zu programmieren. Soweit klappt alles mit dem fliegen,

zu dem Problem, so mehr "Gas" ich gebe desto schneller wird das Flugzeug, ist ja klar, doch wenn das "Gas" auf 0 steht,

also wenn ich bremse steht es ja in der Luft, bewegt sich das Flugzeug nicht mehr nach vorn, weil ich ja keine GegenFunktion

programmiert habe, die die Schwerkraft simuliert.

Zurzeit meine Funktion für die Bewegung:
Delphi-Quellcode:
  // Speed = 0 ; Gas geben erhöht, Bremsen erniedrigt dessen Wert, erhöht sich bis max. 150 ; min. 0
  FXSpeed := round(cos(PI/180*Angle)*Speed);
  FYSpeed := round(sin(PI/180*Angle)*Speed);
  
  X := X + FXSpeed * TimeGap;
  Y := Y + FYSpeed * TimeGap;
das klappt alles soweit gut doch wie Schaffe ich es die Schwerkraft einzubauen?

danke im vorraus

mfg
Christian
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#2

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 17:08
Da die Schwerkraft immer gleich stark nach unten beschleunigt, kannst du doch einfach von der Y-Position in jedem Schritt einen gewissen Wert abziehen, sodass das Flugzeug also sinkt, wenn es bisher genau horizontal geflogen wäre. Ggf kannst du diese Sinkgeschwindigkeit auch umgekehrt proportional zur Geschwindigkeit machen: Ist das Flugzeug superschnell, sinkt es nicht, bleibt es fast stehen, plumst es vom Himmel.
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 17:20
Ich würde folgendes Vorschlagen:

1. Du überlagst dir, welche Kräfte auf das Flugzeug wirken. Hier würde ich die Luftreibung, die Auftriebskraft, die Schwerkraft und den Schub der Triebwerke ansetzen.

2. Wovon hängen die Kräfte ab? Luftreibung kann schnell kompliziert werden, nehmen wir mal an, die Kraft ist proportional zum Quadrat der Geschwindigkeit. Auftrieb ebenfalls. Schwerkraft und Schub sind unabhängig bzw. konstant.

Daraus kann man dann eine realistische Bewegung simulieren.

So - bevor ich weitermache, ein paar Fragen:

Wie sieht dein Programm aus? Fliegt das Flugzeug z.B. immer nach Rechts und man kann es nach oben und unten lenken? Oder guckt man von oben drauf?
  Mit Zitat antworten Zitat
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#4

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 17:45
Also da ich nicht sehr erfahren bin habe ich mich schon wie erwähnt an ein Fun - Flugezugspiel probiert.

Also es soll nicht sehr realistisch sein.

Es wird von der seite betrachtet und man steuert mit den Pfeiltasten.

Also Gas geben,bremsen,rechts-,links drehen.

Man kann damit nach oben und unten fliegen, also es wird nicht von oben betrachtet.

Es werden eigentlich keine Kräfte beachtet. Luftreibung existiert nicht.

Wollte deswegen nur die Schwerkraft einbauen.

Also sobald die Geschwindigkeit sich auf null befindet ,dass Flugzeug sinkt.
Christian
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 18:25
Also wenns wirklich nur ein bisschen Gravitation sein soll, geht das so:

Delphi-Quellcode:
// Speed = 0 ; Gas geben erhöht, Bremsen erniedrigt dessen Wert, erhöht sich bis max. 150 ; min. 0
  FXSpeed := round(cos(PI/180*Angle)*Speed);
  FYSpeed := round(sin(PI/180*Angle)*Speed + 0.5 * TimeGap);
  

  X := X + FXSpeed * TimeGap;
  Y := Y + FYSpeed * TimeGap;
Was da aber noch nicht mit drin ist, ist die Sache mit dem schneller fliegen <=> mehr Auftrieb
  Mit Zitat antworten Zitat
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#6

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 18:42
ok das ist schonmal eine gute Antwort

Wie würde das denn Aussehen mit schneller fliegen <=> mehr Auftrieb?

Könntest du mir das näher erläutern oder sogar ein paar Beispiele nennen?
Christian
  Mit Zitat antworten Zitat
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, 21: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
sabbert

Registriert seit: 16. Apr 2008
67 Beiträge
 
#8

Re: Andorra 2D Physik Problem

  Alt 10. Aug 2009, 22:22
Also habe alles mir angeschaut und versucht einzubinden, bloß ist jetzt mein flugzeug jetzt nur oben links in der Ecke hm^^

Hab da wohl etwas falsch verstanden?!

Habe auch an den Werten rumgespielt.

Edit:

Ok jetzt passiert schon etwas^^

Aber Flugzeug steigt von der Anfanbgsposition nur langsam nach oben...

Sollte aber nach unten, wegen der Schwerkraft.
Christian
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Andorra 2D Physik Problem

  Alt 11. Aug 2009, 08:54
Ja, sorry ...

Das Koordinatensystem, was ich benutzt habe, ist mit der Y-Achse nach oben und X-Achse nach rechts.

Mach ganz am Ende sowas:

Delphi-Quellcode:
X := Round(Position.X);
Y := Round(Screen.Height - Position.Y); // Screen.Height bei Vollbild, sonst eben die Höhe des Anzeigebereichs
Dann sollte es besser gehen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz