AGB  ·  Datenschutz  ·  Impressum  







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

Mini-Flugzeugsimulator

Ein Thema von Crocotronic · begonnen am 24. Mär 2015 · letzter Beitrag vom 25. Mär 2015
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Mini-Flugzeugsimulator

  Alt 24. Mär 2015, 23:01
Uff. Wenn du den Luftwiderstand noch berücksichtigen willst, dann wird es kompliziert. Denn dann hast du mit Differenzialgleichungen zu tun. Wenn ich mich recht an mein Bauingenieurstudium und der Mechanikvorlesung aus dem dritten Semester erinnere.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Mini-Flugzeugsimulator

  Alt 24. Mär 2015, 23:26
Um das Ganze zu vereinfachen erstellt man sich ein festes Zeitraster für das man die eigentlichen Berechnungen durchführt. Dadurch können einige Werte vorberechnet oder fest vorgegeben werden und meistens sind es dann simple Additionen für die Berechnung der neuen Positionswerte.

Vor jedem Zeichnen bestimmt man die Zeit die seit dem letzten Zeichnen vergangen ist und bestimmt daraus die Anzahl der Zeitraster (x). Nun werden die Berechnungen einfach (x) mal durchgeführt und dann wird dieser Zustand gezeichnet. Die noch verbleibende Restzeit wird bei dem nächsten Durchgang berücksichtigt.

Nehmen wir an, das Zeitraster legen wir auf 20ms fest und ca. alle 40-60ms können wir neu zeichnen:
Code:
ZeitRaster = 20
// erster Durchgang
ZeitReserve = 0
ZeitVergangen = 45
Frames = ( ZeitReserve + ZeitVergangen ) div ZeitRaster = 2
ZeitReserve = ZeitReserve + ZeitVergangen - Frames * ZeitRaster = 5
// 2x Frames berechnen und anzeigen

// zweiter Durchgang
ZeitVergangen = 58
Frames = ( ZeitReserve + ZeitVergangen ) div ZeitRaster = 3
ZeitReserve = ZeitReserve + ZeitVergangen - Frames * ZeitRaster = 2
// 3x Frames berechnen und anzeigen

...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#3

AW: Mini-Flugzeugsimulator

  Alt 24. Mär 2015, 23:38
Zuerst mal vielen, vielen Dank jfHeins!
Also die Darstellung geschieht in 2D, d.h. die Kameraposition ist erstmal ganz normal von der Seite, wie in guten alten Zeiten. Das Flugzeug soll sich auf einer Karte frei bewegen können.

Was die Begrifflichkeiten angeht: Habe gestern mein Mahte-Abitur auf dem beruflichen Gymnasium mit dem Profilfach Informatik absolviert, von dem her sollten mir Ableitung und co. bekannt sein

Grundlegend geht es mir erstmal drum, wie die Formel aussehen muss, wenn ein Flieger mit der Masse M im Winkel von z.B. 80° nach oben fliegt. Physik war noch nie meine Stärke, weshalb ich auch Chemie gewählt habe. Deshalb ist mir nicht ganz klar, wie ich die Gegenkraft mit einberechnen muss (Trägheit etc.) Außerdem soll der Flieger auch anders reagieren, wenn er nach unten Fliegt, da dann die Gewichtskraft die Beschleunigung "verstärkt".
Der Nickwinkel kann durch die Pfeiltasten variiert werden. Was du so geheimnisvoll mit Ableitung ausdrücken wolltest, ist wahrscheinlich
Code:
s'(t) = v(t)
und
Code:
s''(t) = a(t)
Nur wofür sollte ich die unbedingt bestimmen?
Das mit dem Luftwiderstand sieht zwar sehr interessant aus, ist jedoch etwas zu umfassend für mein Vorhaben. Dennoch glaube ich, dass du mir einiges erklären und mich weiter bringen könntest!

@Oliver: Vielen Dank für die Erläuterung. Da ich mich mit dem Thema "Video-Spiele" noch nie beschäftigt habe, ist soetwas sehr hilfreich für mich!

Geändert von Crocotronic (24. Mär 2015 um 23:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 09:58
...wenn ein Flieger mit der Masse M im Winkel von z.B. 80° nach oben fliegt. Physik war noch nie meine Stärke...
Keine Tragfläche bietet bei 80° Auftrieb... Das geht nur über Antriebsleistung.

Eine Tragfläche erzeuge je nach Anstellwinkel mehr oder weniger Auftrieb. Ausgehend vom Horizontalflug wo der
Auftrieb=Masse ist, kannst Du also den Anstellwinkel vergrößern und so mehr Auftrieb erzeugen...
Dadurch erhöht sich aber der Widerstand.

Dem sind jedoch Grenzen gesetzt. Wenn die Umströmende Luft aufgrund des zu hohen Anstellwinkels nicht mehr anliegt, erzeuge die Tragfläche ganz plötzlich keinen Auftrieb mehr. Das ist je nach Tragflächenprofil unterschiedlich
und ob Klappen "gesetzt" sind oder "Vorflügel"...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 13:02
Uff. Wenn du den Luftwiderstand noch berücksichtigen willst, dann wird es kompliziert. Denn dann hast du mit Differenzialgleichungen zu tun. Wenn ich mich recht an mein Bauingenieurstudium und der Mechanikvorlesung aus dem dritten Semester erinnere.
Natürlich will ich das Und Differenzialgleichungen sind es ohnehin schon, sobald man Bewegungen und Beschleunigungen numerisch simuliert. Ob man es beim Namen nennt, oder nicht.

Grundlegend geht es mir erstmal drum, wie die Formel aussehen muss, wenn ein Flieger mit der Masse M im Winkel von z.B. 80° nach oben fliegt. Physik war noch nie meine Stärke, weshalb ich auch Chemie gewählt habe. Deshalb ist mir nicht ganz klar, wie ich die Gegenkraft mit einberechnen muss (Trägheit etc.) Außerdem soll der Flieger auch anders reagieren, wenn er nach unten Fliegt, da dann die Gewichtskraft die Beschleunigung "verstärkt".
Hoffentlich sollte die Formel dann nicht anders aussehen als sonst - zumindest wenn wir alle Einflüsse in der Formel berücksichtigen.

Zunächst stellen wir ein Kräftegleichgewicht auf. D.h. wir überlegen usn, was für Kräfte auf das Flugzeug in welcher Richtung wirken. (Kräfte sind Vektoren) Dann kommt der Impulserhaltungssatz: p' = Summe aller Kräfte. Da sich die Masse deines Flugzeugs nicht ändert (Vereinfachung!) können wir schreiben:

Beschleunigung = a(t) = x''(t) = Kräftesumme/Masse (Alles Vektoren)

Die Geschwindigkeit deines Flugzeugs ergibt sich nun aus der anfänglichen Geschwindigkeit und der auf-integrierten Beschleunigung. Ja, dabei entsteht ein kleiner Fehler, da du keine infinitesimal kleinen Zeitschritte machst. Aber da du auch keine Referenzkurve hast, kannst du kleine Fehler ignorieren.

Zitat:
Der Nickwinkel kann durch die Pfeiltasten variiert werden. Was du so geheimnisvoll mit Ableitung ausdrücken wolltest, ist wahrscheinlich
Code:
s'(t) = v(t)
und
Code:
s''(t) = a(t)
Nur wofür sollte ich die unbedingt bestimmen?
Das mit dem Luftwiderstand sieht zwar sehr interessant aus, ist jedoch etwas zu umfassend für mein Vorhaben. Dennoch glaube ich, dass du mir einiges erklären und mich weiter bringen könntest!
Maßgeblich für den Stömungsabriss ist aber nicht der Nickwinkel, sondern vielmehr der Anstellwinkel. (Anstellwinkel = Pitchwinkel - arctan2(Geschwindigkeit)) Wenn das Flugzeug 10° nach oben zeigt, kann das in einem Steigflug wunderbar funktionieren. Aber falls das Flugzeug nach unten fliegt (und dabei nach oben zeigt) dann ist der Anstellwinkel zu groß und es kommt zum Strömungsabriss.

Genauer gesagt: Auftriebskraft ergibt sich aus dem Auftriebsbeiwert und der Geschwindigkeit, der Auftriebsbeiwert hängt aber vom Anstellwinkel ab.

Eine Trägheitskraft brauchst du nicht zu modellieren, die Trägheit ergibt sich daraus, dass du die Kräfte durch die Masse teilst.

Zitat:
Nur wofür sollte ich die unbedingt bestimmen?
In der Schule hast du sicher öfters Ableitungen zu gegebenen Funktionen bestimmt. Das Problem hier ist umgekehrt: Du kennst die Ableitungen (Beschleunigung), und möchtest du Funktion plotten (Position). Das nennt sich Anfangswertproblem.

Sobald die Luftreibung dazu kommt, kannst du die Gleichungen auch (fast) nicht mehr analytisch lösen. Daher geht man oft den Weg über das Kräftegleichgewicht (lässt sich meistens ganz gut Aufstellen) und Integriert das dann.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 16:16
Da sich die Masse deines Flugzeugs nicht ändert
Stimmt auch nicht so ganz...

Klar die Masse ändert sich nicht... Abgesehen von Treibstoffverbrauch oder Eisansatz..

Aber:Wenn Du eine Kurve mit 60° Bank fliegst "wiegt" Dein Flugzeug schon doppelt so viel...
Bedeutet Deine Tragfläche muss doppelt so viel Auftrieb liefern...
Dieser Auftrieb wird nur durch einen erhöhten Anstellwinkel erreicht.

Maßgeblich für den Stömungsabriss ist aber nicht der Nickwinkel, sondern vielmehr der Anstellwinkel. (Anstellwinkel = Pitchwinkel - arctan2(Geschwindigkeit)) Wenn das Flugzeug 10° nach oben zeigt, kann das in einem Steigflug wunderbar funktionieren. Aber falls das Flugzeug nach unten fliegt (und dabei nach oben zeigt) dann ist der Anstellwinkel zu groß und es kommt zum Strömungsabriss.
Da geht aber einiges durcheinander!

Es geht hierbei nicht um die "Richtung" in der das Flugzeug zeigt oder fliegt...
Der Anstellwinkel ist der Winkel zwischen Profilsehne und der anströmenden Luft.

Mavarik

Geändert von Mavarik (25. Mär 2015 um 16:20 Uhr)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 19:09
Da sich die Masse deines Flugzeugs nicht ändert
Stimmt auch nicht so ganz...

Klar die Masse ändert sich nicht... [...]

[...] Wenn das Flugzeug 10° nach oben zeigt, kann das in einem Steigflug wunderbar funktionieren. Aber falls das Flugzeug nach unten fliegt (und dabei nach oben zeigt) dann ist der Anstellwinkel zu groß und es kommt zum Strömungsabriss.
[...] Der Anstellwinkel ist der Winkel zwischen Profilsehne und der anströmenden Luft.

Mavarik
Ich finde die Widersprüche nicht .

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#8

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 20:06
Mir gefällt die Entwicklung der Diskussion Das erinnert mich an eine Spielerei von vor 15 Jahren (Herrje, wo ist nur die Zeit hin).
Damals hatte ich nach eingehendem Studieren der Webseite von David Braben angefangen einen Elite-Klon zu schreiben.

Der Code für die Flugbewegung war nicht sonderlich komplex, aber tat seinen Dienst:

Delphi-Quellcode:
function moveToTarget(cur, tar, speed: single): single;
begin
  if (cur <> tar) then
  begin
    if (cur < tar) then
    begin
      cur := cur + speed;
      if (cur > tar) then
        cur := tar;
    end
    else
    begin
      cur := cur - speed;
      if (cur < tar) then
        cur := tar;
    end;
  end;
  result := cur;
end;

...

    Rcur.x := moveToTarget(Rcur.x, Rtar.x, Rdampen.x);
    Rcur.y := moveToTarget(Rcur.y, Rtar.y, Rdampen.y);
    Rcur.z := moveToTarget(Rcur.z, Rtar.z, Rdampen.z);

    // z-Achsenrotation für Autopilot
    if (Rcur.z <> 0) then
    begin
      thrust.Assign(0, 0, 1);
      thrust.Mul(Matrix);
      M.RotateAbout(thrust, -Rcur.z);
      Matrix.Mul(M);
    end;

    if (Rcur.x <> 0) then
    begin
      thrust.Assign(1, 0, 0);
      thrust.Mul(Matrix);
      M.RotateAbout(thrust, -Rcur.x);
      Matrix.Mul(M);
    end;

    if (Rcur.y <> 0) then
    begin
      thrust.Assign(0, 1, 0);
      thrust.Mul(Matrix);
      M.RotateAbout(thrust, -Rcur.y);
      Matrix.Mul(M);
    end;

    // Minimalgeschwindigkeit
    if (fSpeedTar < 4) then
      fSpeedTar := 4;
    fSpeedCur := moveToTarget(fSpeedCur, fSpeedTar, 2);
    if (fSpeedCur <> 0) then
    begin
      thrust.Assign(0, 0, fSpeedCur);
      thrust.Mul(Matrix);
      Position.Add(thrust);
      Movement.Copy(thrust);
    end
    else
      Movement.Assign(0, 0, 0);
Bei der Gelegenheit habe ich den Code mal wieder rausgekramt und gleich um FMX und GDI+ erweitert. Schon erstaunlich, wie einfach die alte Delphi2 Version auf Delphi7 bzw. XE5/8 portiert werden konnte.
Angehängte Grafiken
Dateityp: jpg flupp.jpg (108,8 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

AW: Mini-Flugzeugsimulator

  Alt 25. Mär 2015, 20:30
Da sich die Masse deines Flugzeugs nicht ändert
Stimmt auch nicht so ganz...
Deshalb steht ja auch direkt dahinter ein "(Vereinfachung!)"


[...] Der Anstellwinkel ist der Winkel zwischen Profilsehne und der anströmenden Luft.

Mavarik
Ich finde die Widersprüche nicht .

lg Caps
Das eine ist halt eine Vereinfachung, und das andere die strikte Definition. Auf der einen Seite wurde Profilsehne = Flugzeuglängsachse gesetzt. Das ist beim realen Flugzeug meist nicht so, der Flügel ist etwas geneigt (soll ja auch ordentlich Auftrieb erzeugen, wenn das Flugzeug geradeaus fliegt). Andererseits werden damit auch Auftriebshilfen wie Slats und Klappen, sowie neigbare Flügel vernachlässigt.
Auf der anderen Seite habe ich Winkel der anströmenden Luft = Geschwindigkeit im Erdbasierten Intertialsystem gesetzt. Das gilt eben nur für Windstille.

Um noch weitere Vereinfachungen aufzuzeigen: Der Luftwiderstand müsste sich natürlich mit der Höhe ändern, genauso auch der Auftrieb. Und Kurven (das Quer- und Seitenruder) sind in dieser 2D-Betrachtung natürlich ohnehin außen vor. Man kann das im Grunde beliebig kompliziert machen.
  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 02:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz