![]() |
AW: Mini-Flugzeugsimulator
Zitat:
Wenn Du nicht auf einem anderen Core die Sachen berechnest, hast Du dafür sowieso keine Möglichkeit... Wenn das letzte Frame angezeigt wurde, kommst Du in Deine Berechnung ggf. hängst Du sowieso schon wieder hinterher... Also kannst Du nur die Zwischenrechnungen vergessen und Dein Object gemäß vergangener Zeit an der richtigen Stelle anzeigen. Mavarik |
AW: Mini-Flugzeugsimulator
Zitat:
Zitat:
lg Caps |
AW: Mini-Flugzeugsimulator
Zitat:
|
AW: Mini-Flugzeugsimulator
Ja, freilich; ich wollte ja welche wegwerfen, wenn sie nicht schnell genug gerendert werden können, weiter nüschde ;-)
|
AW: Mini-Flugzeugsimulator
Zitat:
Zitat:
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:
Genauer gesagt: Auftriebskraft ergibt sich aus dem Auftriebsbeiwert und der Geschwindigkeit, der ![]() Eine Trägheitskraft brauchst du nicht zu modellieren, die Trägheit ergibt sich daraus, dass du die Kräfte durch die Masse teilst. Zitat:
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. |
AW: Mini-Flugzeugsimulator
Zitat:
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. Zitat:
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 |
AW: Mini-Flugzeugsimulator
Zitat:
lg Caps |
AW: Mini-Flugzeugsimulator
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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.
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); |
AW: Mini-Flugzeugsimulator
Zitat:
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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