13.08.2013 Aufrufe

Entwicklung eines Flugsimulators basierend auf einem ...

Entwicklung eines Flugsimulators basierend auf einem ...

Entwicklung eines Flugsimulators basierend auf einem ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kantonsschule Sargans<br />

Maturaarbeit 2009/2010<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong><br />

physikalischen Modell<br />

Autor:<br />

Elio Gubser<br />

Betreut durch:<br />

Physiker Dr. Franz Müller<br />

Experte:<br />

Aerodynamiker Dr. Jürg Müller<br />

8. März 2010


Inhaltsverzeichnis<br />

1 Einleitung 4<br />

1.1 Themenwahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

1.2 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.2.1 Zielformulierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.2.2 Methodik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.2.3 Ergebnisse und Reflexion . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.3 Screenshots des Spieles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

1.4 Screenshots im 3D-Modeller . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2 Physikalische Grundlagen 11<br />

2.1 Aerodynamik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.1.1 Gravitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.1.2 Vortrieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.1.3 Auftrieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.1.4 Luftwiderstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.2 Trägheitsmoment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3 Starrer Körper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3.1 Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.3.2 Orientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.3.3 Bestandteile <strong>eines</strong> Flugzeugs . . . . . . . . . . . . . . . . . . . . . 17<br />

3 Mathematische Umsetzung 19<br />

3.1 Variablendeklaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.2 Koordinatensysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.3 Bewegungsgleichungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3.1 Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3.2 Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3.3 Robustere Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.4 Trägheitstensor und Trägheitsmoment . . . . . . . . . . . . . . . . . . . . 23<br />

3.4.1 Berechnung des Trägheitsmomentes . . . . . . . . . . . . . . . . . 23<br />

3.4.2 Berechnung des Trägheitstensors . . . . . . . . . . . . . . . . . . . 25<br />

3.4.3 Volumina und Massepunkte . . . . . . . . . . . . . . . . . . . . . . 25<br />

3.5 Berechnung der Kräfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

3.5.1 Auftrieb und Widerstand . . . . . . . . . . . . . . . . . . . . . . . 27<br />

3.5.2 Diagramme Auftriebs- und Widerstandskoeffizienten . . . . . . . . 27<br />

3.5.3 Berechnung der Koeffizienten . . . . . . . . . . . . . . . . . . . . . 27<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 2


Inhaltsverzeichnis<br />

3.5.4 Definition <strong>eines</strong> Flügels . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.5.5 Aufbereitung der Eingabedaten . . . . . . . . . . . . . . . . . . . . 29<br />

3.5.6 Strömungsabriss . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.6 Antrieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.6.1 Definition <strong>eines</strong> Antriebs . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.7 Gravitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

4 Umsetzung in eine Software 37<br />

4.1 Fundament . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

4.1.1 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

4.1.2 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.2 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.3 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.3.1 Input Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.3.2 Physics Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

4.3.3 Graphics Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.3.4 Recorder Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

5 Ergebnisse zur Koeffizientenberechnung 45<br />

6 Ausblick 47<br />

7 Reflexion 48<br />

8 Danksagung 49<br />

9 Deklaration zur Eigenständigkeit 50<br />

A Datenträger 55<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 3


Kapitel 1<br />

Einleitung<br />

1.1 Themenwahl<br />

Schon immer interessierte ich mich für die Fliegerei und war ein passionierter Papierfliegler.<br />

Ich war fasziniert, mit welcher Leichtigkeit die Papierflieger sich in der Luft hielten<br />

und eigentlich zufällige, aber dennoch bezaubernde Akrobatik durchführten. Mit etwa<br />

elf Jahren war ich zum ersten Mal an <strong>einem</strong> Computer und spielte mit m<strong>einem</strong> Bruder<br />

stundenlang Strategie- und Autospiele. Der Computer war schon damals für mich ein<br />

unglaublich grosses Entdeckungsgebiet und schon bald, mit vierzehn Jahren, fing ich<br />

an C zu programmieren 1 . Das erste Programm, das ich schrieb, spukte zwar nur ’Hello<br />

World’ <strong>auf</strong> dem Bildschirm aus, doch es führte dazu, dass ich die Computerspiele vergass<br />

und mich nur noch zwischen Codezeilen und Datenstrukturen bewegte.<br />

Schliesslich wagte ich mich im Jahr 2005 mehr oder weniger erfolgreich an grössere<br />

Projekte. Zum Beispiel wollte ich einen Instant Messenger realisieren und fand bald<br />

schon ein paar Mitarbeiter dafür. Nun — Das Projekt ist schon im Planungsstadium<br />

eingestellt worden. Aber seit etwa zwei Jahren stecke ich einen Teil meiner Freizeit in die<br />

Mitentwicklung <strong>eines</strong> RTS 2 -Games namens Warzone 2100. Das Spiel war vor etwa zwölf<br />

Jahren ein Top-Seller. Dessen Quellcode wurde 2004 veröffentlicht. Seither entwickeln<br />

wir, ein Team bestehend aus Leuten aus aller Welt, das Spiel in unserer Freizeit weiter.<br />

In meiner Maturaarbeit habe ich nun meine zwei Leidenschaften, die Fliegerei und<br />

die Welt des Computers verbunden.<br />

1 Eine weit verbreitete Programmiersprache.<br />

2 Real-Time-Strategy: Echtzeit Strategiespiel<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 4


1.2 Abstract<br />

1.2.1 Zielformulierung<br />

Kapitel 1. Einleitung<br />

Diese Arbeit befasst sich mit dem Aufbau und <strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> in Form<br />

<strong>eines</strong> Computerspiels. Dabei stand für mich der physikalische Aspekt im Vordergrund.<br />

Ziel war es, mit <strong>einem</strong> kleinen Budget, viel Zeit und den heutigen technischen Mitteln<br />

einen spielbaren Flugsimulator zu entwickeln. Das Arbeitsspektrum war vielfältig, da es<br />

alle Bereiche der Spielentwicklung einbezieht. Die Dokumentation befasst sich mit der<br />

Ausarbeitung des Modells und seine Umsetzung in eine Software. Ausserdem soll der<br />

Source-Code übersichtlich und gut dokumentiert sein.<br />

1.2.2 Methodik<br />

Zuerst arbeitete ich mich in die komplexe Thematik der Flugtechnik und Aerodynamik<br />

ein. Die geeignete Lektüre zu finden erwies sich schwieriger als erwartet. Das Spektrum<br />

ging von Fluiddynamik mit kompressiblen, viskosiven Fluiden bis zu einfachen Aufgaben<br />

im Physikunterricht. Entweder zu kompliziert, rechenintensiv und unnötig genau<br />

oder viel zu einfach, um damit allgemeine Flugsituationen in Echtzeit zu simulieren.<br />

Aus diesem Umstand heraus entstand der Forschungsteil meiner Arbeit: Nachdem ich<br />

die Grundprinzipien verstanden hatte, konzipierte ich ein vereinfachtes Auftriebsmodell,<br />

mit dem das Flugzeug für Spielzwecke genügend realitätsnah berechnet werden kann.<br />

Darumherum entwickelte ich eine anpassbare, modulartig <strong>auf</strong>gebaute Simulationsumgebung.<br />

Parallel dazu widmete ich mich der Umsetzung. Diese beinhaltet nicht nur die<br />

Implementierung des Modells, sondern auch die <strong>Entwicklung</strong> der anderen Programmmodule,<br />

sowie die Kreation von 3D-Objekten und Szenerie.<br />

1.2.3 Ergebnisse und Reflexion<br />

Der Simulator erfüllt seine Haupt<strong>auf</strong>gabe. Es ist ohne weiteres möglich auch komplexere<br />

Flugmanöver durchzuführen. Das System ist in der Lage verschiedene Flugzeugmodelle<br />

zu simulieren. Der Grafikteil hingegen ist zwar noch kein wirklicher Augenschmaus, aber<br />

darin liegt auch nicht der Schwerpunkt dieser Arbeit. Eine klare Abgrenzung von Grafikund<br />

Simulationsteil mit einer hochflexiblen Verbindungsschicht gibt dem Flugzeugmodellierer<br />

jetzt schon grosse Freiheit, die Einzelheiten des Flugzeugs, wie Klappen und<br />

Instrumente, zu visualisieren. Das Auftriebsmodell lieferte hingegen nicht die gewünschten<br />

Ergebnisse. Die Auftriebspolare sieht leider bei allen Flügelformen identisch aus. Das<br />

liegt daran, dass der Flügel nur mit seinen Ausmassen definiert wird und somit für eine<br />

genauere Berechnung zu wenig Informationen bietet. Glücklicherweise heisst das nun<br />

nicht, dass sich alle Flugzeuge gleich fliegen. Es ist trotzdem möglich unterschiedliche<br />

Flugzeuge zu simulieren, indem man die Flügel und Antriebe anders platziert, dimensioniert<br />

oder zusätzlich hinzufügt. Somit wird das Spielerlebnis nicht zu sehr getrübt<br />

und ich vermute es wird, wenn überhaupt, nur geübten Fliegern <strong>auf</strong>fallen. Man kann<br />

hier natürlich noch nicht von <strong>einem</strong> fertigen Softwareprodukt sprechen. Dafür fehlen die<br />

Spielinhalte wie zum Beispiel Grafiken, Sounds und eine spannende Geschichte.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 5


1.3 Screenshots des Spieles<br />

Kapitel 1. Einleitung<br />

Hier sind einige Screenshots des Spieles um den Leser <strong>auf</strong> die vorliegende Arbeit einzustimmen.<br />

Abbildung 1.1: Landschaft aus grosser Entfernung<br />

Abbildung 1.2: Propellerflugzeug (Arbeitstitel: Bignose)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 6


Kapitel 1. Einleitung<br />

Abbildung 1.3: Propellerflugzeug<br />

Abbildung 1.4: Düsenjäger (Arbeitstitel: Fighter)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 7


Kapitel 1. Einleitung<br />

Abbildung 1.5: Cockpit des Propellerflugzeugs<br />

Abbildung 1.6: Cockpit des Düsenjägers<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 8


Kapitel 1. Einleitung<br />

1.4 Screenshots im 3D-Modeller<br />

Abbildung 1.7: Propellerflugzeug im Modeller<br />

Abbildung 1.8: Düsenjäger im Modeller<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 9


Kapitel 1. Einleitung<br />

Abbildung 1.9: Düsenjäger im Modeller<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 10


Kapitel 2<br />

Physikalische Grundlagen<br />

2.1 Aerodynamik<br />

Ein Flugzeug erfährt hauptsächlich vier Kräfte. Diese sind Widerstand, Auftrieb, Vortrieb<br />

und Gravitation. Der Auftrieb und der Widerstand hängen von der Geschwindigkeit<br />

des Flugzeugs ab. Diese werden durch die Vortriebskraft, bzw. die Triebwerke erzeugt.<br />

In diesem Abschnitt werden die Grundlagen der Aerodynamik angerissen. Ich habe<br />

bewusst versucht das ganze Kapitel allgemein verständlich zu gestalten. Für den Leser,<br />

der sich näher mit der mathematischen Ausarbeitung befassen möchte werfe seinen Blick<br />

ins Kapitel 3 <strong>auf</strong> Seite 19.<br />

2.1.1 Gravitation<br />

Die Gravitation, auch Schwerkraft genannt, bezeichnet eine gegenseitige Anziehung von<br />

Massen. Versetzt man einen Körper von der Erde <strong>auf</strong> den Mond so ändert sich seine Masse<br />

nicht, wohl aber sein Gewicht. Im allgemeinen Sprachgebrauch wird zwischen Masse<br />

und Gewicht oft nicht unterschieden. Das Gewicht ist eigentlich eine Anziehungskraft<br />

zwischen der Erde und dem Körper. Sie kommen einander entgegen. Normalerweise ist<br />

die Masse <strong>eines</strong> Flugzeugs im Vergleich zur Masse der Erde vernachlässigbar klein: Man<br />

kann sagen, nur das Flugzeug bewegt sich. Im Gegensatz dazu beeinflussen sich Mond<br />

und Erde sehr wohl. Der Mond dreht sich aber genau gesagt nicht einfach um die Erde,<br />

sondern beide Himmelskörper drehen sich um ihr gemeinsames Zentrum.<br />

2.1.2 Vortrieb<br />

Damit das Flugzeug genügend Geschwindigkeit zum Fliegen hat braucht es einen Antrieb<br />

wie zum Beispiel Düsen- oder Propellertriebwerke.<br />

2.1.3 Auftrieb<br />

Die wichtigste Kraft für ein Flugzeug ist die Auftriebskraft. Sie ist gleichzeitig auch die<br />

komplexeste. Über die genauen Ursachen des Auftriebs streitet man noch heute. Noch<br />

immer gibt es Lehrbücher, welche falsche Theorien <strong>auf</strong>stellen. Hier vorgestellt sind drei<br />

durchaus plausible, aber falsche Theorien.[2]<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 11


Falsche Theorie : Steine flitschen<br />

Kapitel 2. Physikalische Grundlagen<br />

Eine falsche Theorie namens Skipping Stone (<strong>auf</strong> deutsch Steine flitschen oder “schifere”)<br />

besagt, dass die Luftteilchen gegen die Unterseite des Flugzeugflügels prallen und<br />

nach dem dritten Gesetz von Newton den Flügel nach oben stossen. Siehe Abbildung<br />

2.1. Der Schwachpunkt an dieser Theorie ist, dass die Oberseite des Flügels nicht berücksichtigt<br />

wird. Nehmen wir an, wir haben zwei Flügel mit identischer Unterseite, aber<br />

sehr verschiedener Oberseite, so stimmen die experimentell bestimmten Auftriebswerte<br />

bei Weitem nicht überein.<br />

Falsche Theorie : Venturi-Flügel<br />

Abbildung 2.1: Skipping Stones Theory<br />

Die Venturi-Theorie besagt, dass <strong>auf</strong>grund der höheren Geschwindigkeit oberhalb des<br />

Flügels ein Unterdruck entsteht. Abbildung 2.2 verbildlicht, dass die Oberseite des Flügels<br />

einer Venturi-Düse ähnelt. Aber sie verhält sich offensichtlich experimentell nicht<br />

wie gewünscht. Zum Beispiel erklärt die Theorie nicht, wieso flache Flügel, wie zum Beispiel<br />

bei <strong>einem</strong> Papierflieger, trotzdem Auftrieb erzeugen. Die untere Flügelseite wird<br />

komplett vernachlässgt. Ausserdem gibt es keine Phantom-Oberfläche, die die andere<br />

Seite der Venturi-Düse darstellt. Bei der Venturi-Düse ist die Geschwindigkeit bei der<br />

blauen Fläche überall gleich. Beim Flügel nimmt sie jedoch, je weiter man sich von der<br />

Flügeloberfläche entfernt, ab.<br />

Falsche Theorie : Längerer Weg<br />

Abbildung 2.2: Venturi Theory<br />

Diese Theorie ist am weitesten verbreitet. Man nennt sie in Englisch Longer-Path- oder<br />

Equal-Transit-Time-Theory. Der Flügel ist so geformt, das die Flügeloberseite eine grös-<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 12


Kapitel 2. Physikalische Grundlagen<br />

sere Fläche besitzt. Diese Theorie schliesst daraus, dass die Luftteilchen, die an der<br />

Oberseite des Flügels vorbei fliessen, schneller sein müssen, als jene an der Unterseite.<br />

Weiter geht die Theorie davon aus, dass die oberen und unteren Teilchen nach dem Flügel<br />

wieder zusammentreffen. Abbildung 2.3 veranschaulicht die Situation. Zwei Argumente<br />

gegen diese Theorie sind: Auch symmetrische oder flache Flügelprofile (Papierflieger)<br />

erzeugen Auftrieb. Die Annahme, dass sich die Teilchen am Ende wieder treffen, beruht<br />

<strong>auf</strong> k<strong>einem</strong> physikalischem Gesetz und wurde auch experimentell widerlegt.<br />

Abbildung 2.3: Longer Path<br />

Richtige Theorie : Luft wird umgelenkt<br />

Die als heute richtig angesehene Theorie besagt, das die Luftmassen durch die Tragfläche<br />

umgelenkt werden und der Flügel dadurch Auftrieb gewinnt. Der Körper ist von Gas<br />

umgeben, gleitet an seiner Form entlang und wird nach unten gestossen. Zu bemerken<br />

ist, dass Ober- und Unterseite am Auftrieb gleichermassen beteiligt sind.<br />

Strömungsabriss<br />

Abbildung 2.4: Turning Fluid<br />

Der folgende aerodynamische Effekt wurde zusätzlich in das physikalische Modell eingebaut,<br />

da er in der Realität einen grossen Einfluss <strong>auf</strong> das Flugverhalten ausübt: Siehe<br />

Abbildung 2.5. Erhöht man den Anstellwinkel einer Tragfläche bezüglich der Anströmungsrichtung,<br />

so erhöht sich erwartungsgemäss auch der Auftrieb. Der Auftrieb erreicht<br />

sein Maximum, sobald die Strömung abreisst (eng. stall). Der Maximalwinkel variiert je<br />

nach Flügelform.<br />

2.1.4 Luftwiderstand<br />

Der Gesamtwiderstand <strong>eines</strong> Flügels berechnet sich aus dem Restwiderstand und dem<br />

induzierten Widerstand. Der induzierte Widerstand wird von Wirbeln hervorgerufen, die<br />

hinter <strong>einem</strong> <strong>auf</strong>triebserzeugenden Körper entstehen. Der Restwiderstand hängt weniger<br />

mit der Auftriebserzeugung zusammen als mit der Form und Beschaffenheit des Körpers.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 13


Restwiderstand<br />

Kapitel 2. Physikalische Grundlagen<br />

Abbildung 2.5: Strömungsabriss / Stall<br />

Eine Komponente des Restwiderstandes ist der Formwiderstand (Abb. 2.6). Jeder Körper<br />

erzeugt <strong>auf</strong>grund seiner Gestalt bzw. Druckverteilung einen gewissen Formwiderstand.<br />

Der Druck ist im Ablösungsgebiet (blau) geringer als im Staupunkt (rot).<br />

Abbildung 2.6: Formwiderstand<br />

Die zweite Komponente nennt man Reibungswiderstand. Er entsteht, wenn ein Körper<br />

durch ein Fluid gezogen wird (Abb. 2.7). Reibungseffekte spielen sich sehr nahe<br />

an der Körperoberfläche ab. Man bezeichnet diese Schicht auch als Grenzschicht. Die<br />

schwarzen Pfeile bezeichnen die Geschwindigkeit der Luftpartikel.<br />

Abbildung 2.7: Reibungswiderstand<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 14


Induzierter Widerstand<br />

Kapitel 2. Physikalische Grundlagen<br />

Auftriebserzeugende Körper besitzen einen Unterdruck <strong>auf</strong> ihrer Oberseite und einen<br />

Überdruck <strong>auf</strong> ihrer Unterseite (Abb. 2.8). An den Flügelenden stossen die unterschiedlichen<br />

Druckgebiete zusammen. Luftmassen strömen von der Unterseite nach oben um<br />

den Druckunterschied auszugleichen. Dies erzeugt gegenläufige Wirbel an beiden Enden<br />

des Flügels. Die stetige Erzeugung dieser Wirbel entzieht dem Flugzeug Bewegungsenergie<br />

und wird induzierter Widerstand genannt. Dieser Effekt hat einen grossen Einfluss<br />

<strong>auf</strong> den Gesamtwiderstand.<br />

2.2 Trägheitsmoment<br />

Abbildung 2.8: Induzierter Widerstand<br />

Rotierende Gegenstände besitzen ein Trägheitsmoment. Es gibt an, wie leicht sich die<br />

Rotationsbewegung des Körpers ändern lässt. Je nach Drehachse ist dieser Wert verschieden.<br />

Verdeutlichen sie sich folgendes Beispiel: Wir halten eine lange Stange aus Metall in<br />

der Hand. Erfahrungsgemäss kann man ihn ganz leicht um seine Längsachse drehen. Um<br />

ihn aber um eine abstehende Achse (siehe Abb. 2.9) zu drehen braucht es mehr Kraft.<br />

Das Trägheitsmoment beinhaltet die ganze Geometrie des Körpers. Verändert sich die<br />

Drehachse oder die Geometrie des Körpers, so ändert sich auch das Trägheitsmoment.[9]<br />

2.3 Starrer Körper<br />

Da das Flugzeug im Idealfall ein starrer Körper ist, sich also nicht verformt, besitzt<br />

es sechs Freiheitsgrade. Dies sind drei Translationsfreiheitsgrade und drei Rotationsfreiheitsgrade.<br />

Das Flugzeug kann man also durch Position und Orientierung eindeutig<br />

dargestellt werden.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 15


Kapitel 2. Physikalische Grundlagen<br />

Abbildung 2.9: Unterschiedliche Trägheit bei unterschiedlicher Rotationachse<br />

2.3.1 Position<br />

Abbildung 2.10: Welt- und Flugzeugkoordinatensystem<br />

Zur Positionsbestimmung wird die Welt in ein dreidimensionales Koordinatensystem<br />

eingeteilt, auch globales oder erdfestes Koordinatensystem genannt (Abb. 2.10). Zusätzlich<br />

besitzt das Flugzeug ein eigenes, auch lokales oder körperfestes Koordinatensystem<br />

genannt. Die Schubkraft, sowie die <strong>auf</strong>tretenden aerodynamischen Kräfte werden ausschliesslich<br />

im Flugzeugkoordinatensystem berechnet. Eine Ausnahme bildet die Gravitationskraft.<br />

Sie zeigt immer in die negative Z’-Richtung und muss daher ins Flugzeugkoordinatensystem<br />

transformiert werden. Positions- und Orientierungsänderungen werden<br />

sinngemäss nur im globalen Koordinatensystem abgetragen. p bezeichnet den Ursprung<br />

des lokalen Koordinatensystems und zugleich den Schwerpunkt des Flugzeugs bezüglich<br />

des erdfesten Systems.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 16


2.3.2 Orientierung<br />

Kapitel 2. Physikalische Grundlagen<br />

Die Orientierung <strong>eines</strong> starren Körpers ist durch drei orthogonale Drehachsen vollständig<br />

beschrieben. Die dazugehörigen Winkel heissen Eulerwinkel. Um vom erdfesten Koordinatensystem<br />

Z’ ins körperfeste Koordinatensystem Z zu gelangen, muss zuerst eine<br />

1. Parallelverschiebung um p vorgenommen werden. Das entstandene Koordinatensystem<br />

besitzt die Achsen x0, y0, z0 (Siehe Abb. 2.11).<br />

2. Nun drehen wir um die y0 Achse mit dem Winkel ϕy (Ψ), auch bezeichnet als<br />

Gierwinkel.<br />

3. Danach wird um die x1 Achse um den Winkel ϕx (Θ) = Nickwinkel gedreht,<br />

4. und schlussendlich um die z2 Achse um den Winkel ϕz (Φ) = Rollwinkel.<br />

Die genaue Abbildung in Matrizenform befindet sich <strong>auf</strong> Seite 19. Die Zeichen Psi Ψ,<br />

Theta Θ, und Phi Φ in Klammern sind die Variablen, definiert in der Luftfahrtnorm (DIN<br />

9300). Die Beschreibung in Eulerwinkel wird in der Theorie wegen Ihrer Anschaulichkeit<br />

oft verwendet. Für die Implementierung ist sie aber ungeeignet. Abschnitt 3.3.3 <strong>auf</strong> Seite<br />

21 diskutiert die Situation und präsentiert Lösungsvorschläge.<br />

Abbildung 2.11: Orientierung<br />

2.3.3 Bestandteile <strong>eines</strong> Flugzeugs<br />

Unser Flugzeug besteht aus Antrieb und Flügel welche Schub, Widerstand und Auftrieb<br />

generieren. Ich habe mir zum Ziel gesetzt, ein flexibles System zu entwickeln, bei dem<br />

man viele Flügel und mehrere Antriebe fast beliebig anordnen kann (Abb. 2.12). Damit<br />

kann man ohne Probleme verschiedene Flugzeugtypen simulieren. Man braucht nur die<br />

Bestandteile zu modifizieren. Theoretisch wäre das Modell auch in der Lage, Unfall- und<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 17


Kapitel 2. Physikalische Grundlagen<br />

Abbildung 2.12: Bestandteile <strong>eines</strong> Flugzeugs<br />

Zwischenfallsszenarien wie zum Beispiel Triebwerksausfall, Klappenstörung, ungleiche<br />

Massenverteilung, Instrumentenfehler usw. zu simulieren.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 18


Kapitel 3<br />

Mathematische Umsetzung<br />

Wir sind nun da angekommen, wo es ans Eingemachte geht. Hier werden Schritt für<br />

Schritt die verwendeten Formeln im Flugsimulator erarbeitet. Ein wenig Grundwissen<br />

in Vektorgeometrie, Physik und linearen Abbildungen ist erforderlich. Wir beginnen<br />

zuerst bei der Umrechnung zwischen den Koordinatensystemen, erarbeiten danach die<br />

Bewegungsgleichungen starrer Körper mit der Trägheit und setzen uns schlussendlich<br />

mit der Kräfteberechnung auseinander.<br />

3.1 Variablendeklaration<br />

Translation Rotation<br />

Position p Orientierung/Winkelposition ϕ<br />

Masse m Trägheitstensor I<br />

Geschwindigkeit v Rotation/Winkelgeschwindigkeit ω<br />

Impuls P Drehimpuls L<br />

Beschleunigung a Winkelbeschleunigung α<br />

Kraft F Drehmoment M<br />

Zeitabschnitt ∆t<br />

Achtung: Der Impuls P ist nicht zu verwechseln mit der Leistung, die auch mit P bezeichnet<br />

wird, aber in dieser Abhandlung keine Verwendung findet.<br />

3.2 Koordinatensysteme<br />

Wie im Abschnitt 2.11 und 2.10 <strong>auf</strong> Seite 16 angedeutet, bestimmen wir die Orientierung<br />

mit Hilfe dreier Drehungen um drei orthogonale Drehachsen. Somit ist es uns<br />

möglich Vektoren zwischen globalem und lokalem Koordinatensystem zu transformieren.<br />

1. gieren, 2. nicken, 3. rollen. Die Matrizen sind von rechts nach links zu lesen.<br />

⎛<br />

x<br />

⎜<br />

⎝<br />

‘<br />

y ‘<br />

z ‘<br />

⎞ ⎡<br />

⎤⎡<br />

⎤⎡<br />

⎤⎛<br />

⎞<br />

cos(ϕz) −sin(ϕz) 0 cos(ϕx) 0 sin(ϕx) 1 0 0 x<br />

⎟ ⎢<br />

⎥⎢<br />

⎥⎢<br />

⎥⎜<br />

⎟<br />

⎠= ⎣sin(ϕz)<br />

cos(ϕz) 0⎦⎣<br />

0 1 0 ⎦⎣<br />

0 cos(ϕy) −sin(ϕy) ⎦⎝<br />

y⎠<br />

0 0 1 −sin(ϕx) 0 cos(ϕx) 0 sin(ϕy) cos(ϕy) z<br />

(3.1)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 19


3.3 Bewegungsgleichungen<br />

Kapitel 3. Mathematische Umsetzung<br />

Die Gesamtmasse m des Flugzeugs setzt sich zusammen aus den Einzelmassen (m =<br />

<br />

mi). Wir definieren einen Schwerpunkt um die Drehbewegung und die lineare Bewegung<br />

trennen zu können. Damit wir diese direkt herleiten können, setzen wir das<br />

Massezentrums des Flugzeugkoordinatensystems als Nullpunkt.<br />

3.3.1 Translation<br />

⎛ ⎞<br />

0<br />

⎜ ⎟<br />

⎝0⎠<br />

=<br />

0<br />

<br />

i mi · ri<br />

m<br />

Die Translation leiten wir aus der Summe der Kräfte her.<br />

F =<br />

n<br />

Fi<br />

i=1<br />

(3.2)<br />

(3.3)<br />

Die resultierende Kraft ist proportional zur Beschleunigung des Flugzeugs. 1 Multipliziert<br />

man die Kraft mit der Zeit, die zwischen zwei Zeitschritten vergangen ist (= ∆t)<br />

und addiert sie mit dem Impuls Pn, so erhalten wir den neuen Impuls Pn+1: <br />

<br />

Pn+1 = Pn + ∆t · F (3.4)<br />

(3.5)<br />

Wir wollen aber nicht einfach nur den Impuls P , sondern auch die absolute Position p<br />

im Raum. Diese erhalten wir durch Umrechnen in Geschwindigkeit und dar<strong>auf</strong>folgender<br />

numerischen Integration, wobei n der Zeitschritt ist.<br />

3.3.2 Rotation<br />

Pn+1<br />

<br />

pn+1 = pn + ∆t ·<br />

m<br />

(3.6)<br />

Die Berechnung der Orientierung sieht sehr ähnlich aus, besitzt jedoch ein paar zusätzliche<br />

Zwischenschritte, da nicht mit der Masse sondern mit der Trägheit gearbeitet wird.<br />

Um das Gesamtdrehmoment auszurechnen, müssen analog zur linearen Bewegung,<br />

alle Drehmomente addiert werden.<br />

Drehmoment<br />

M =<br />

n<br />

i=1<br />

Mi<br />

(3.7)<br />

Die Grundgleichung <strong>eines</strong> Drehmomentes ist das Kreuzprodukt von Angriffspunkt und<br />

Kraft: M = r × F . Die Abbildung 3.1 versucht die Situation zu verdeutlichen. M steht<br />

senkrecht zur Ebene Σ(r, F ) und die Länge des Vektors M entspricht der Fläche des<br />

Rhombus, <strong>auf</strong>gespannt von r und F . In welche Richtung sich das Drehmoment zeigt,<br />

kann man sich mit der Rechte-Daumen-Regel verdeutlichen (Abb. 3.2).<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 20


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.1: Drehmoment<br />

Abbildung 3.2: Rechte Daumen Regel<br />

Jetzt fehlt uns noch das Trägheitsmoment. Es ist im Abschnitt 3.4 <strong>auf</strong> Seite 23<br />

beschrieben. Im Vergleich zu den geradlinigen Bewegungen übernimmt es die Rolle der<br />

Masse. Sie hilft uns dabei die Beschleunigung <strong>eines</strong> Drehmomentes zu erhalten. Es gilt:<br />

Rotation<br />

M = J · α α = M<br />

J<br />

Analog zu Gleichung 3.5 <strong>auf</strong> Seite 20 kommen wir zum Drehimpuls:<br />

(3.8)<br />

<br />

Ln+1 = Ln + ∆t · M (3.9)<br />

Nun formen wir die Gleichung so um wie bei der Translation und kommen schlussendlich<br />

zu dieser Gleichung:<br />

3.3.3 Robustere Methoden<br />

Diskussion<br />

Ln+1<br />

<br />

ϕn+1 = ϕn + ∆t ·<br />

J<br />

(3.10)<br />

Bei der Rotation sind robustere Methoden zwingend notwendig. [5] Eulerwinkel besitzen<br />

ein grosses Manko, welches als Gimbal Lock[12] bezeichnet wird. Bei <strong>einem</strong> Gimbal<br />

Lock wird eine Drehachse identisch mit einer anderen Drehachse (der Freiheitsgrad wird<br />

somit um eins kleiner). Das Bild verdeutlicht den Umstand. Rotationsmatrizen sind die-<br />

1 Theoretisch könnten wir direkt die Beschleunigung a aus F<br />

m<br />

berechnen, wir bleiben jedoch in der<br />

Kraft/Impuls-Form, um diese Herleitung wie die der Rotation zu gestalten.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 21


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.3: Gimbal Lock<br />

sem Phänomen zwar nicht unterworfen, jedoch sind sie relativ ungenau. Eine Drehung<br />

in Eulerwinkelform wird in drei Variablen beschrieben, gleichviel wie die Anzahl Freiheitsgrade.<br />

Eine Rotationsmatrix benötigt hingegen neun Variablen. Da der Computer<br />

nicht mit unendlicher Genauigkeit rechnen kann, entstehen Rundungsfehler. Auch wenn<br />

diese Fehler nur klein sind, summieren sie sich mit der Zeit <strong>auf</strong> und werden sichtbar.<br />

Quaternionen<br />

Eine befriediegende Lösung bieten Quaternionen. Quaternionen ähneln dem Zahlensystem<br />

der komplexen Zahlen. Man nennt sie auch Hamilton-Zahlen, benannt nach s<strong>einem</strong><br />

Erfinder. In diesem Abschnitt wird nur die Anwendung in Bezug <strong>auf</strong> Rotationen erklärt.<br />

q = x0 + x1 · i + x2 · j + x3 · k (3.11)<br />

Zwei Drehungen repräsentiert durch Quaternionen können durch multiplizieren zu<br />

einer Drehung umgewandelt werden.<br />

Rq1<br />

◦ Rq2 = Rq1·q2<br />

(3.12)<br />

Eine Rotation, die den Vektor r in r ′ umwandelt, schreibt sich:<br />

r ′ = q · r · ¯q (3.13)<br />

Wobei ¯q die konjugierte Quaternion ist, sie ist gleich der Inverse:<br />

¯q = x0 − x1 · i − x2 · j − x3 · k = q −1<br />

(3.14)<br />

Ein Drehung um die Achse, gegeben durch den normierten Vektor r, um den Winkel<br />

α kann mit<br />

q = cos α + r · sin α (3.15)<br />

beschrieben werden.<br />

Haben wir einen Drehimpuls L, so muss dieser Vektor normiert werden. Seine halbe<br />

Länge ist dann gleich dem Drehwinkel.<br />

r = L<br />

| L|<br />

α = | L|<br />

2<br />

(3.16)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 22


Kapitel 3. Mathematische Umsetzung<br />

3.4 Trägheitstensor und Trägheitsmoment<br />

Um die Bewegungsgleichungen zu lösen, fehlt uns noch I, das Trägheitsmoment bzw.<br />

dessen Verallgemeinerung den Trägheitstensor. Zuerst befassen wir uns mit dem Trägheitsmoment.<br />

Es gelten folgende Grundbeziehungen[9]:<br />

M = J · α α = M<br />

J<br />

(3.17)<br />

Es gibt allgemeine Formeln für Trägheitsmomente für einfache Körper. Das Trägheitsmoment<br />

für einen Vollzylinder, der um seine Symmetrieachse rotiert, ist in der<br />

Gleichung 3.18 beschrieben. Interessant: Der Radius ist dabei im Quadrat. Das heisst,<br />

ein Zylinder aus Metall hat ein kleineres Trägheitsmoment als ein gleichschwerer Zylinder<br />

aus Holz, weil beim Holzzylinder <strong>auf</strong>grund der Dichte das Volumen und somit sein<br />

Radius grösser ist.<br />

J = 1<br />

m · r2<br />

(3.18)<br />

2<br />

3.4.1 Berechnung des Trägheitsmomentes<br />

Die Grundgleichung 3.19 wird in Abb. 3.4 verbildlicht. Ein Massenpunkt ist zum Beispiel<br />

ein Flügel oder ein Antrieb.<br />

n<br />

J =<br />

(3.19)<br />

i=1<br />

mi · r 2 i<br />

Im allgemeinen Fall dreht sich das Flugzeug um die Achse g, siehe Abb. 3.5. Jetzt<br />

Abbildung 3.4: Trägheitsmoment aus Massepunkten<br />

müssen wir das Koordinatensystem so drehen, dass wir den Abstand r direkt ablesen<br />

können. Das erreichen wir mit zwei Rotationen bei Gleichung 3.20 und Abbildung 3.6.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 23


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.5: Massepunkte und Abstand in der 3. Dimension<br />

Abbildung 3.6: Rotation damit g <strong>auf</strong> Y zu liegen kommt.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 24


Kapitel 3. Mathematische Umsetzung<br />

Ag = Rx α ◦ Rz β<br />

(3.20)<br />

α = arctan( gx<br />

) (3.21)<br />

β = arctan(<br />

gy<br />

<br />

g2 x + g2 y<br />

) (3.22)<br />

gz<br />

r ′′ = Ag · r (3.23)<br />

Daraus folgt für das Trägheitsmoment mit n Massenpunkten. Den Abstand erhalten<br />

wir, wenn wir nur die x- und z-Koordinate verwenden.<br />

J =<br />

n<br />

i=1<br />

mi · ( r ′′<br />

2<br />

i<br />

x + r ′′<br />

i<br />

2<br />

y<br />

) (3.24)<br />

Diese Methode hat den Nachteil, dass bei jedem Zeitabschnitt die ganze Prozedur<br />

wiederholt werden muss und somit sehr rechenintensiv ist. Der nachfolgend erläuterte<br />

Trägheitstensor ist eine allgemeine Beschreibung des Trägheitsmomentes für beliebige<br />

Drehachsen.<br />

3.4.2 Berechnung des Trägheitstensors<br />

Die Gleichung für den Trägheitstensor gegeben durch einzelne Massepunkte lautet[10][11]:<br />

I = <br />

⎡<br />

y<br />

⎢<br />

mi ⎣<br />

i<br />

2 i + z2 i −xiyi −xizi<br />

−yixi x2 i + z2 i −yizi<br />

−zixi −ziyi x2 i + y2 ⎤<br />

⎥<br />

⎦ (3.25)<br />

i<br />

Die Werte in der Diagonale bezeichnet man als Hauptträgheitsmomente und die restlichen<br />

Deviationsmomente.<br />

Die Komponentenschreibweise lautet:<br />

Iαβ = Iβα = <br />

i<br />

mi(r 2 i δαβ − xiαxiβ) (3.26)<br />

Hierbei bezeichnet xi1 = xi, xi2 = yi und xi3 = zi. δ ist das Kronecker-Delta. Die indices<br />

α und β nehmen dabei die Werte 1 bis 3 an, gemäss den drei Raumdimensionen.<br />

<br />

1 für α = β<br />

δαβ =<br />

(3.27)<br />

0 sonst<br />

3.4.3 Volumina und Massepunkte<br />

Gibt man <strong>einem</strong> Flugzeugelement (Flügel, Antrieb) einfach ein Gewicht und nimmt<br />

seinen Ursprung als Massepunkt so lässt sich dadurch das Trägheitsmoment nur ungenügend<br />

beschreiben. Liegt der Ursprung nämlich im Punkt (0/0/0), so hat diese Masse<br />

keinen Einfluss <strong>auf</strong> das Trägheitsmoment. Das Problem liegt darin, dass der Punkt dimensionslos<br />

ist. Abhilfe schafft man indem man den Körper in unendlich kleine Teilchen<br />

teilt und für jedes Teilchen das Trägheitsmoment ausrechnet. In der Theorie berechnet<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 25


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.7: Volume<br />

man das Trägheitsmoment durch Integration über das Flugzeugvolumen. Um dies programmtechnisch<br />

nachempfinden zu können habe ich behelfsmässig Volumen eingeführt.<br />

Dabei wird mit den Vektoren a, b, c ein Spat definiert wie in Abbildung 3.7. Dieser wird<br />

in kleine Spate unterteilt, jedes stellt nun ein Massepunkt dar.<br />

Ich habe die Implementation folgendermassen gestaltet: Der Körper wird in ein 3dimensionales<br />

Gitter mit Abstand ∆s unterteilt. Nun normieren wir einzeln die Vektoren<br />

a, c und c und multiplizieren sie mit ∆s.<br />

sa = na · ∆s (3.28)<br />

Die Anzahl Unterteilungen wird durch die Variable ra, rb, rc beschrieben (r für<br />

resolution).<br />

ra = |a|<br />

(3.29)<br />

∆s<br />

Ein Massepunkt und seine Punktmasse sind definiert durch die folgende Gleichung,<br />

wobei u, v und w Indices für ra, rb und rc sind.<br />

p(u, v, w) = sa · u + sb · v + sc · w (3.30)<br />

m =<br />

M<br />

ra · rb · rc<br />

(3.31)<br />

Das Trägheitsmoment mit gegebenem Massepunkt und Punktmasse berechnet sich<br />

folgendermassen. Wobei natürlich x, y, z die Komponenten von p sind. Ich nenne diese<br />

Funktion K:<br />

⎡<br />

y<br />

⎢<br />

K(m, p) = m · ⎣<br />

2 i + z2 i −xiyi −xizi<br />

−yixi x2 i + z2 i −yizi<br />

−zixi −ziyi x2 i + y2 ⎤<br />

⎥<br />

⎦ (3.32)<br />

i<br />

Die endgültige Gleichung hat die Form:<br />

ra rb rc<br />

I =<br />

K(m, p) (3.33)<br />

u=0 v=0 w=0<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 26


3.5 Berechnung der Kräfte<br />

3.5.1 Auftrieb und Widerstand<br />

Kapitel 3. Mathematische Umsetzung<br />

Betrachten wir die Formel 3.34, wobei FA die Auftriebskraft ist, ρ die Dichte der Luft,<br />

v die Strömungsgeschwindigkeit, A die Auftriebsfläche und cA der Auftriebskoeffizient.<br />

Dieser Koeffizient hängt von der Flügelform, dem Anstellwinkel, der Machzahl 2 und der<br />

Reynoldszahl 3 ab. Der Luftwiderstand berechnet sich gleichermassen, jedoch mit dem<br />

Widerstandskoeffizient cW .<br />

FA = 1<br />

2 · cA · ρ · v 2 · A (3.34)<br />

FW = 1<br />

2 · cW · ρ · v 2 · A (3.35)<br />

Normalerweise bestimmt man die Koeffizienten experimentell im Windkanal. Dabei<br />

setzt man die Umgebungsvariablen ρ, v, A und misst die Kraft F und setzt alles in die<br />

folgende Formel ein.<br />

c =<br />

2 · F<br />

ρ · v 2 · A<br />

3.5.2 Diagramme Auftriebs- und Widerstandskoeffizienten<br />

Untersucht man einen Flügel, indem man seinen Anstellwinkel verändert, erhält man ein<br />

Diagramm ähnlich wie Abb. 3.8. Kombiniert man die zwei Komponenten, erhält man ein<br />

Polardiagramm, auch Lilienthalpolare genannt (Abb. 3.9). Sie sagt viel über die Qualität<br />

und Einsatzmöglichkeiten <strong>eines</strong> Flügels aus.<br />

3.5.3 Berechnung der Koeffizienten<br />

Ein Flugsimulator muss diese Koeffizienten selbst errechnen. Ein Hauptproblem liegt im<br />

Umfang der Literatur. Es gibt zahlreiche Konzepte um diese Diagramme zu modellieren.<br />

Ich stöberte eine Zeit lang in Quelle [8], bis ich <strong>auf</strong> Seite 105 zur folgenden Formel kam<br />

(Anstellwinkel α):<br />

cA = 2π · α (3.36)<br />

Diese Formel beschreibt eine flache Platte in <strong>einem</strong> nichtkompressiblen Fluid ohne<br />

Widerstand. Sie reicht für einen Flugsimulator nicht aus. Da ich aber die anderen<br />

Konzepte nicht begriffen habe und ich zu diesem Zeitpunkt niemanden, der mit diesem<br />

Thema vertraut war, finden konnte, entwickelte ich mein eigenes Modell. Für den<br />

Widerstand nahm ich vorerst einmal folgendes an:<br />

cW = |2π · α| (3.37)<br />

2 Verhältnis der Reisegeschwindigkeit zur Schallgeschwindigkeit.<br />

3 Massgebend für Grenzschichteinflüsse (Oberflächenreibung, Strömungsabriss)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 27


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.8: Auftrieb- und Widerstandsdiagramm<br />

3.5.4 Definition <strong>eines</strong> Flügels<br />

Abbildung 3.9: Polardiagramm<br />

Ich brauchte eine genügend genaue Definition <strong>eines</strong> Flügels um meine Berechnungen<br />

durchführen zu können. Gleichzeitig muss diese Definition genügend flexibel sein, um<br />

zum Beispiel V-förmige oder senkrecht stehende Flügel zu simulieren. Siehe Abbildung<br />

3.10: Wobei o der Ursprungsvektor, c der Sehnenvektor, s der Spannweitenvektor und<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 28


Kapitel 3. Mathematische Umsetzung<br />

d die Dicke des Flügels bezeichnet. Zusätzlich ist die Geschwindigkeit v eingezeichnet.<br />

Um den Restwiderstand einbeziehen zu können wurde die Profildicke d eingeführt. Um<br />

das Flugzeug zu steuern, dreht man den Vektor c um den Winkel β. Im Abschnitt 3.5.5<br />

wird das näher besprochen.<br />

Abbildung 3.10: Definition <strong>eines</strong> Flügel<br />

3.5.5 Aufbereitung der Eingabedaten<br />

Kommen wir nun Schrittweise zum Ziel, alle benötigten Parameter für die Auftriebsformel<br />

und die Widerstandsformel aus den vorhandenen Daten zu erhalten. Wir benötigen<br />

den Anstellwinkel α, die Anflugsgeschwindigkeit |v|) und die Auftriebsfläche AA<br />

und die Luftwiderstandsfläche AW . Für die Dichte der Luft ρ nehmen wir den Wert<br />

unter Normalbedingungen 1, 293kg/m 3 an. Der Auftrieb wirkt senkrecht zum Luftstrom<br />

(und nicht zum Flügel) und der Widerstand entgegen dem Luftstrom, daher müssen die<br />

beiden Richtungsvektoren a und w auch noch berechnet werden. An diesen wird dann<br />

die Auftriebs- bzw. Widerstandskraft abgetragen. Abbildung 3.11 zeigt die Situation.<br />

Abbildung 3.12 zeigt eine Detailansicht, sie wird im Abschnitt 3.5.5 näher betrachtet.<br />

Berechnung des Anstellwinkels<br />

Der Anstellwinkel lässt sich relativ einfach durch Berechnung des Winkels zwischen der<br />

Geraden v und der Ebene Σ(s,c) mit der Normale n = s × c im Raum berechnen.<br />

sin α =<br />

v · n<br />

|v| · |n|<br />

(3.38)<br />

Um das Flugzeug zu steuern wird der Vektor c um β an s gedreht. Wir definieren<br />

c0 als Anfangszustand. Die Gleichung 3.39 bezeichnet eine Drehung um eine allgemeine<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 29


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.11: Anstellwinkel und Kraftrichtungsvektoren<br />

Gerade 4 . Wobei δ1 und δ2 vom Vektor s stammen:<br />

As β = Rz −δ1 ◦ Rx −δ1 ◦ Rz β ◦ Rx δ2 ◦ Rz δ1<br />

(3.39)<br />

δ1 = arctan( sx<br />

) (3.40)<br />

δ2 = arctan(<br />

c = As β · c0<br />

Zusammengefasst heisst das:<br />

sy<br />

<br />

s2 x + s2 y<br />

) (3.41)<br />

sz<br />

(3.42)<br />

n = s × (As β · c0) (3.43)<br />

sin(α) =<br />

v · n<br />

|v| · |n|<br />

Berechnung des Auftriebskraftrichtungsvektors<br />

(3.44)<br />

Es gibt zwei Lagebeziehungen aus den beiden wir den Vektor gewinnen können. Zum<br />

einen muss der a senkrecht <strong>auf</strong> v stehen, das Skalarprodukt muss also 0 ergeben. Gleichung<br />

3.45. Die zweite Bedingung fordert, dass a <strong>auf</strong> der Ebene Ψ(v, n) liegt. Die Abbildung<br />

3.12 zeigt, dass sich die zweite Bedingung nur mit <strong>einem</strong> Parameter t austatten<br />

lässt, siehe Gleichung 3.46. Kombinieren wir die beiden Gleichungen, erhalten wir 3.47,<br />

das lässt sich ausmultiplizieren zu 3.48. Und da das Skalarprodukt von v mit sich selber<br />

sein Quadrat ergibt, sieht das Ganze nachher wie Gl. 3.49 aus. Setzen wir t in die<br />

4 In der Rechts-nach-Links Schreibweise<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 30


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.12: Auftriebsrichtungsvektor<br />

Gleichung 3.46 ein, erhalten wir nun die Formel 5 3.50<br />

a · v = 0 (3.45)<br />

a = n + t · v (3.46)<br />

(n + t · v) · v = 0 (3.47)<br />

n · v + t · v · v = 0 (3.48)<br />

a = n −<br />

n · v<br />

t = −<br />

|v| 2<br />

Berechnung des Widerstandskraftrichtungsvektors<br />

Der Geschwindigkeitsvektor wird einfach umgekehrt.<br />

Berechnung der Widerstandsfläche<br />

(3.49)<br />

n · v<br />

· v (3.50)<br />

|v| 2<br />

w = −v (3.51)<br />

Die Widerstandsfläche wird berechnet indem man den Flügel <strong>auf</strong> die Ebene Θ mit deren<br />

Normalen (Geschwindigkeitsvektor des Flugzeugs) v projiziert und dann die Flächen ausrechnet<br />

und zusammenzählt 6 . Die Abbildung 3.13 zeigt nur die Projektion der hinteren<br />

5<br />

Auf die Länge des Auftriebsrichtungsvektors muss man keine Rücksicht nehmen, da es nur die Richtung<br />

angibt.<br />

6<br />

Eigentlich geht diese Ebene durch 0, aus Sorge zur Übersichtlichkeit wurde sie ein bisschen versetzt.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 31


Kapitel 3. Mathematische Umsetzung<br />

Flügelfläche 7 und soll schrittweise erklärt werden. Die beiden anderen Flächen werden<br />

analog berechnet. Übrigens wird d somit definiert als Multiplikation der Dicke mit dem<br />

normierten Normalenvektor des Flügels d = d · n.<br />

Abbildung 3.13: Widerstandsfläche<br />

Um den Abstand d zu irgend<strong>einem</strong> Vektor r zur Ebene zu berechnen benützen wir die<br />

Hessesche Normalform 3.52. Dazu normieren wir den Vektor v zu v0. Zum projizierten<br />

Vektor r ′ von r gelangen wir durch Gleichung 3.53 bzw. 3.54. Diese Methode wenden<br />

wir jetzt <strong>auf</strong> s,c und d an. Das d in der Gleichung ist die Komponente von in Richtung<br />

r · vn = d (3.52)<br />

r ′ = r − vn · d (3.53)<br />

r ′ = r − vn · (r · vn) (3.54)<br />

Haben wir s ′ , c ′ und d ′ , so können wir mit Kreuzprodukten die Widerstandsfläche,<br />

bzw. Stirnfläche, berechnen.<br />

Berechnung der Auftriebsfläche<br />

AW = | s ′ × c ′ | + | s ′ × d ′ | + | d ′ × c ′ | (3.55)<br />

Die Berechnung der Auftriebsfläche ist gleich wie die der Widerstandsfläche ausser, dass<br />

v nicht mehr die Normale ist, sondern <strong>auf</strong> der Ebene liegt. Mit nur <strong>einem</strong> Vektor ist<br />

die Ebene Θ aber noch nicht definiert. Wir brauchen einen zweiten Ebenenvektor oder<br />

mindestens einen Punkt <strong>auf</strong> der Ebene. Theoretisch gibt’s hier viele Möglichkeiten, man<br />

kann auch einen Punkt (0, 0, y0) nehmen, wobei y0 = vy. Das würde aber das Modell<br />

einschränken, da Σ dann nicht mehr frei positionierbar wäre. Beginnen wir mit Abbildung<br />

3.14. Dabei wird die Ebene Σ, definiert durch n, mit der Ebene Ψ, definiert durch v,<br />

geschnitten. Daraus resultiert k. Den Vektor m erhalten wir durch das Kreuzprodukt<br />

von v × k, das gibt unsere Projektionsebene Θ. Die Gleichungen 3.56, 3.57 fassen alles<br />

7 Ob jetzt hinten oder vorne spielt keine Rolle, die Fläche bleibt gleich.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 32


Kapitel 3. Mathematische Umsetzung<br />

zusammen. Abbildung 3.15 hilft vielleicht die Situation zu verstehen und Abbildung 3.16<br />

zeigt schlussendlich die Projektion.<br />

k = Σ ∩ Ψ (3.56)<br />

m = k × v (3.57)<br />

Abbildung 3.14: Schnitt Σ mit Ψ gibt k<br />

Abbildung 3.15: Kreuzprodukt v × k gibt m<br />

Jetzt nehmen wir die Hessesche Normalform 3.54 zur Hilfe und berechnen schlussendlich<br />

die projizierte Fläche.<br />

r ′ = r − mn · (r · mn) (3.58)<br />

AA = | s ′ × c ′ | + | s ′ × d ′ | + | d ′ × c ′ | (3.59)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 33


3.5.6 Strömungsabriss<br />

Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.16: Die Projektion<br />

Sobald der Angriffswinkel grösser als ein bestimmter Wert ist, wird ein verkleinernder<br />

Faktor hinzugerechnet. Dabei erfährt die Auftriebspolare einen Knick und sinkt dann bei<br />

weiter zunehmendem Anstellwinkel linear ab. Das Flussdiagramm 3.17 und das Polardiagramm<br />

3.18 erläutern den kleinen Algorithmus. Dabei ist α der Angriffswinkel, εu das<br />

obere und εl das untere Extrema. fu und fl bezeichnen die Stärke des Auftriebseinbruchs.<br />

3.6 Antrieb<br />

3.6.1 Definition <strong>eines</strong> Antriebs<br />

Der Antrieb wird definiert durch den Ursprung o und die Richtung p, siehe Abb. 3.19.<br />

Die Länge dieses Vektors gibt an, mit welcher Kraft der Antrieb am Flugzeug zieht.<br />

3.7 Gravitation<br />

Die Gewichtskraft zieht alle Gegenstände nach “unten”. Dies gilt natürlich nur im erdfesten<br />

Koordinatensystem, darum muss sie noch ins körperfeste Koordinatensystem umgerechnet<br />

werden.<br />

FG = m · g (3.60)<br />

Mϕ bezeichnet die Drehmatrix des Flugzeugs um vom lokalen ins globale Koordinatensystem<br />

umzurechnen. Die Gewichtskraft muss aber vom globalem ins lokale transformiert<br />

werden. Daher nehmen wir die Inverse M −1<br />

ϕ .<br />

FG = m · M −1<br />

ϕ · g (3.61)<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 34


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.17: Flussdiagramm Strömungsabriss<br />

Abbildung 3.18: Auftriebspolare mit Strömungsabriss<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 35


Kapitel 3. Mathematische Umsetzung<br />

Abbildung 3.19: Defintion <strong>eines</strong> Antriebes<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 36


Kapitel 4<br />

Umsetzung in eine Software<br />

Ein Computerspiel ist wie jedes grössere Programm auch, ein komplexes Gebilde von<br />

Datenmanipulation und Programmverl<strong>auf</strong>. Es ist nicht möglich, alle Facetten des Programms<br />

zu erklären, es macht indes auch keinen Sinn in jedes Detail zu gehen. Möchte<br />

der Leser sich genauer als hier beschrieben mit dem Programm auseinandersetzen, so sei<br />

ihm die beiliegende Code-Dokumentation und der Programmcode ans Herz gelegt.<br />

4.1 Fundament<br />

4.1.1 Libraries<br />

Aufgrund der enormen Komplexität und Facetten, die ein jedes Spiel mit sich bringt,<br />

werde ich einige Module nicht selber programmieren, sondern sogenannte „Bibliotheken”<br />

zur Hilfe nehmen. Auch kommerzielle Spiele sind <strong>auf</strong> solche Bibliotheken angewiesen und<br />

zahlen mehrere zehntausend Dollar für eine Nutzungslizenz. Heutzutage gibt es jedoch<br />

einige hervorragende (auch von Game Studios genutzte) Bibliotheken, die frei und gratis<br />

erhältlich sind. Solche Software nennt man Open-Source Software 1 .<br />

• OGRE Object-Oriented Graphics Rendering Engine ist eine in C++ geschriebene<br />

Open-Source Engine für die Grafikdarstellung. Sie bietet eine grosse intuitive Umgebung<br />

zur <strong>Entwicklung</strong> von Software mit Hardwarebeschleunigter 3D-Darstellung<br />

mittels OpenGL oder DirectX. Sie ist auch erweiterbar durch Plugins wie Terrain,<br />

Atmosphäre, Physik und Audio und unter anderem l<strong>auf</strong>fähig <strong>auf</strong> Linux, Windows<br />

und Mac. http://www.ogre3d.org/<br />

• SDL Simple Directmedia Layer ist eine Multimedia-Abstraktionsschicht geschrieben<br />

in C um plattformunabhängigen Code zu schreiben. Ich verwende sie als Eingabequelle.<br />

http://www.libsdl.org/<br />

• LUA Scripting Language benütze ich als Interfacesprache um Simulationen dynamisch<br />

zur L<strong>auf</strong>zeit zu manipulieren (Siehe Update-Skript 4.3.3 <strong>auf</strong> Seite 43)<br />

http://www.lua.org/<br />

1 Weitere Informationen über die ganze Open Source Thematik finden Sie <strong>auf</strong> http://de.wikipedia.<br />

org/wiki/Open_Source<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 37


4.1.2 Tools<br />

Kapitel 4. Umsetzung in eine Software<br />

Hier zusätzlich eine kleine Auflistung von Programmen, die mir bei meiner Arbeit behilfilch<br />

waren. Ich vermeide eine grössere Zusammenfassung zusammenzustellen, da die<br />

Programme <strong>auf</strong> ihrer Webseite sehr gut vorgestellt werden.<br />

• Blender 3D Modeller ist eine Open-Source 3D-Grafiksoftware. Man kann mit ihr<br />

dreidimensionale Körper modellieren, texturieren, animieren und rendern. Es ist<br />

sehr ausgereift und für meine Zwecke mehr als ausreichend. http://www.blender.<br />

org/<br />

• Inkscape Vector Graphics Editor ist ein Editor für Scalable Vector Graphics (SVGs).<br />

Mit diesem Programm erstellte ich alle Grafiken die sie in dieser Dokumentation<br />

finden. http://www.inkscape.org/<br />

• Doxygen ist ein Source-Code Dokumentationssystem. Sie finden die kompilierte<br />

Code-Dokumentation <strong>auf</strong> der beiliegenden CD. http://www.doxygen.org/<br />

• Code::Blocks ist eine <strong>Entwicklung</strong>sumgebung für C/C++ Anwendungen und macht<br />

das Entwicklerleben ein klein wenig leichter. http://www.codeblocks.org/<br />

4.2 Übersicht<br />

Abbildung 4.1: Überblick über den Simulationsprozess<br />

Vor dem Start werden alle Module mit Daten gefüttert und initialisiert. Die Rhomboide<br />

stellen die veränderbaren Daten dar. — Falls sich dieses Projekt in Zukunft weiterentwickelt,<br />

könnte ich mir vorstellen, dass man <strong>eines</strong> Tages weitere Flugzeuge in Form<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 38


Kapitel 4. Umsetzung in eine Software<br />

von Paketen aus dem Internet nachinstallieren kann. — Die Rechtecke sind Programmmodule.<br />

Im Verl<strong>auf</strong> des Kapitels werden wir uns nun näher mit den einzelnen Modulen<br />

befassen. Das Input Module (gelb) stellt die Eingabegeräte wie Tastatur, Joystick oder<br />

Maus als allgemeine Schnittstelle zur Verfügung. Siehe Abschnitt 4.3.1 <strong>auf</strong> Seite 39. Im<br />

Physik Module (violett) finden nicht nur alle Berechnungen statt. Es widerspiegelt auch<br />

den gesamten Inhalt des Spieles. Das Logik Modul (blau) ist für den höheren Zusammenhang<br />

zuständig. Dieses führt im Simulationsprozess das Zepter. Schlussendlich wird mit<br />

Hilfe des Grafik Modules der Spielinhalt <strong>auf</strong> dem Bildschirm dargestellt. Zur Vollständigkeit<br />

ist noch das Recorder Module eingetragen, es zeichnet alle Vorgänge <strong>auf</strong>, bzw.<br />

spielt diese wieder ab. Mit diesem Module ist es möglich eine Session abzuspeichern oder<br />

was auch theoretisch möglich wäre: Ein Multiplayerspiel mit mehreren Piloten, die an<br />

verschiedenen Computern sitzen. Dieses Modul ist fakultativ, d.h. es wird nicht zwingend<br />

benötigt.<br />

Nachdem alle Komponenten mit den Daten initialisiert wurden startet die Simulation.<br />

Der Eingabemanager liefert Informationen in der Form “X-Achse des Joysticks steht<br />

bei 0.6”. Je nach Flugzeugmodell wandelt das Physikmodul diese Information in “Seitenruder<br />

steht bei 8 ◦ ” um. Jetzt wird von jedem Flügel und Antrieb die resultierende<br />

Kraft ausgerechnet. Die Kräfte werden dann Kombiniert und unter Berücksichtigung der<br />

Trägheit in Translation und Rotation umgewandelt. Das Updatescript nimmt nun Informationen<br />

der Physikengine (Rudereinstellung, Position, Orientierung) um bestimmte<br />

Elemente des Flugzeugs zu transformieren: Die Klappe des Seitenruders wird somit um<br />

8 ◦ gedreht. Die Instrumente im Cockpit werden <strong>auf</strong> dieselbe Weise aktualisiert. Der<br />

Abl<strong>auf</strong> der Simulation wird mit dem Logik Modul gesteuert. Es beinhaltet Routinen<br />

um zum Beispiel <strong>auf</strong> einen Flugzeugcrash zu reagieren (z.B. Rückkehr zum Hauptmenü).<br />

Dieses Modul befindet sich in der beiliegenden Version des Simulators erst noch im<br />

Anfangsstadium.<br />

4.3 Module<br />

In Abbildung 4.2 <strong>auf</strong> Seite 40 sind die Vererbung und Verweise der Klassen dargestellt,<br />

die mit der Simulation direkt zusammenhängen. Das Schema ist nicht abgeschlossen<br />

und es ginge eigentlich sehr viel weiter. Ich habe es vereinfacht, um den Rahmen meiner<br />

Arbeit nicht zu sprengen, aber vor allem um den Leser nicht unnötig zu ermüden. Es<br />

vermittelt trotzdem die nötigen Informationen um meine Implementierung zu erklären.<br />

Der Eingabemanager ist dazu da, die Eingabegeräte wie zum Beispiel die Tastatur oder<br />

den Joystick zu abstrahieren. Dieser Schritt ist nötig, da im Allgemeinen die Achsen- und<br />

Knopfbelegung der Joysticks je nach Hersteller variieren. Im physikalischen Teil werden<br />

die Komponenten und deren Eigenschaften definiert. Im grafischen Teil werden die Materialien<br />

und Objekte in die 3D-Engine geladen. Sie ist dafür verantwortlich die Spielwelt<br />

darzustellen. Danach werden die Verbindungen zwischen den Modulen hergestellt.<br />

4.3.1 Input Module<br />

Das Bild 4.3 <strong>auf</strong> Seite 41 versucht die Struktur der Input Engine zu erklären. Leider sind<br />

die Joysticks je nach Hersteller verschieden, und benötigen unterschiedliche Konfiguration.<br />

Um dem Spieler trotzdem grösstmögliche Anpassung zu gewährleisten entwickelte<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 39


Kapitel 4. Umsetzung in eine Software<br />

Abbildung 4.2: Vererbung und Verweise der Simulation<br />

ich dieses Konzept. Es ermöglicht alle Eingabegeräte einheitlich abzufragen. Ein Input<br />

Channel ist grundsätzlich eine Zahl mit Wertebereich von 0 bis 1. In der Grafik verwenden<br />

wir als Beispiel die Joystick Klasse. Aber auch andere Eingabegeräte, wie zum<br />

Beispiel Tastatur, Maus, Game-Pad oder Lenkrad sind möglich. Die Joystick-Klasse implementiert<br />

also ein Eingabegerät. Es ist dafür zuständig, die Joystick Achsen, Button,<br />

Hats an jeweilige Input Channel anzuschliessen. Sie versucht eine Input Config zu finden,<br />

die <strong>auf</strong> den Joystick passt und wendet diese an. Die Input Config wird für jeden<br />

Joystick in sogenannte XML-Dateien definiert. Das Format wird im nächsten Abschnitt<br />

vorgestellt. Diese Zuweisung kann natürlich vom Benutzer eingestellt werden. In der<br />

vorliegenden Programmversion geschieht das durch direktes editieren der Konfigurationsdateien.<br />

Eine benutzerfreundliche Oberfläche wäre wünschenswert, passte aber nicht<br />

mehr in den Terminplan. Hat man ein InputDevice eingerichtet, kann man nun Channel<br />

Slots des InputListeners zuweisen. Ein Device Slot kann dabei mehrere Listener Slots bedienen.<br />

Umgekehrt kann ein Listener Slot bei verschiedenen Device Slots registriert sein.<br />

Dies ermöglicht zum Beispiel, dass man einzelne Funktionen über verschiedene Tasten<br />

der Tastatur bzw. Knöpfe des Joysticks angesteuert werden kann. Hier folgt ein Beispiel<br />

einer Input Config:<br />

Input-Konfiguration<br />

<br />

<br />

<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 40


Kapitel 4. Umsetzung in eine Software<br />

Abbildung 4.3: Schema des Eingabe Modules<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Mit assign werden Achsen oder Buttons zugewiesen. Und mit combine werden zwei<br />

Buttons zu <strong>einem</strong> Channel zusammengenommen. Dies ermöglicht das Steuern per Tastatur<br />

oder Joystick Knöpfen.<br />

4.3.2 Physics Module<br />

Das Physikmodul beinhaltet neben dem Herzstück RigidBody auch Kräfte und Volumina.<br />

Erstere dienen zur Berechnung der Einzelkräfte und Letztere zur Berechnung des<br />

Trägheitsmomentes. Die detaillierte Beschreibung zu diesem Modul finden Sie im vorherigen<br />

Kapitel 2.3 ab Seite 15.<br />

PlaneModel-Konfiguration<br />

Ein Auszug einer PlaneModel-Konfiguration:<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 41


Kapitel 4. Umsetzung in eine Software<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

4.3.3 Graphics Module<br />

Das Graphics Module besitzt zwei Konfigurationen, eine ist dafür zuständig, die 3D-<br />

Objekte zu laden und im Raum zu positionieren und die andere führt Manipulationen<br />

<strong>auf</strong>grund von Eingabewerten und physikalisch berechneten Werten aus.<br />

DotScene-Konfiguration<br />

Der folgende Auszug einer solchen Konfiguration zeigt eine DotScene-Datei. Das Format<br />

wurde nicht von mir entwickelt, sondern stammt aus der Community um Ogre3D. Für<br />

3D-Modelling Software wie blender gibt passende Exporter-Plugins. 2<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

2 Weitere Informationen über das DotScene-Format gibt es unter http://www.ogre3d.org/wiki/<br />

index.php/DotScene<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 42


Kapitel 4. Umsetzung in eine Software<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

< f i l e name=" Scene . m a t e r i a l " /><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Update-Skript<br />

Das Update-Script ist in der Sprache Lua verfasst. Der Simulator stellt dem Skript<br />

Funktionen bereit, um <strong>auf</strong> 3D-Objekte (über die PlaneElement) und simulationsrelevante<br />

Daten zuzugreifen. Mit CairoCanvas besteht zudem die Möglichkeit dynamisch <strong>auf</strong> eine<br />

Textur zu zeichnen. Hier ein Auszug <strong>eines</strong> solchen Skripts, das jedoch stark gekürzt<br />

ist. In diesem Beispiel wird das 3D-Objekt rudder (Seitenruder) um den Anstellwinkel<br />

rotiert.<br />

rudder = {}<br />

rudder . e = plane:getPlaneElement ( " rudder " )<br />

rudder . f = castForceWing ( ( plane:getForce ( " rudder " ) ) )<br />

function update ( timeSinceLastFrame )<br />

rudder . e:resetRotation ( )<br />

rudder . f:yaw ( rudder . f:getAngleDegree ( ) )<br />

end<br />

4.3.4 Recorder Module<br />

Mit der Zeit wollte ich meine Flugkünste aus anderer Perspektive sehen und beschloss<br />

das Programm um eine Aufnahmefunktion zu erweitern. Der grundlegende Gedanke ist,<br />

dass ich alle relevanten Informationen der Simulation abspeichere. Mein Anliegen war,<br />

dass möglichst wenig Daten gesammelt und abgespielt werden mussten, da ich im Sinn<br />

hatte, dieses Modul auch in Verbindung mit einer Multiplayerspielfunktion zu verwenden.<br />

In meiner Implementierung werden zunächst nur InputChannels gesammelt und beim<br />

Abspielen in das Modell injiziiert. Ich nenne diese Datensätze ein Update Record, da sie<br />

nicht den Status widerspiegeln, sondern nur seine Manipulation. Es ergab sich nun aber<br />

ein Problem: Die Wiedergabe <strong>auf</strong> <strong>einem</strong> anderen PC driftete ab. Das heisst, dass sie mit<br />

der Aufnahme nicht mehr übereinstimmt. Dies kommt daher, dass der Computer nicht<br />

mit der exakt gleichen Genauigkeit rechnen konnte. Selbst <strong>auf</strong> demselben PC liessen<br />

sich drifts feststellen, je nach Hintergrundlast in der sich der PC dabei befand. Darum<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 43


Kapitel 4. Umsetzung in eine Software<br />

wurde die Implementierung erweitert, so dass auch alle Statusinformationen (Position,<br />

Orientierung) gesammelt werden (Complete Records). Diese werden aber nur in gewissen<br />

Zeitabständen (z.B. jede Sekunde) gemacht. Beim Abspielen wird anfangs ein Status<br />

Record injiziiert und danach der weitere Verl<strong>auf</strong> mit Hilfe der Update Records simuliert<br />

bis wieder ein Status Record kommt. Damit kann Drifts wirksam vorgebeugt werden.<br />

Würde man nun komplett <strong>auf</strong> Update Records verzichten, so gäbe es zwar auch keine<br />

Drifts, aber die Datenmenge wäre viel, viel grösser und somit untauglich für Multiplayer<br />

über Internet.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 44


Kapitel 5<br />

Ergebnisse zur<br />

Koeffizientenberechnung<br />

In diesem Abschnitt möchte ich dem Leser noch ein generiertes Polardiagramm präsentieren.<br />

Die Ermittlung der Werte geschieht folgendermassen: Das Flugzeug befindet<br />

sich sozusagen in <strong>einem</strong> Windkanal. Nun wird die Strömungsrichtung <strong>auf</strong> der YZ-Ebene<br />

gedreht (bzw. alle Anstellwinkel α eingestellt) und dabei die Koeffizienten <strong>eines</strong> Flügels<br />

mit Hilfe der Gleichung 3.5.1 extrahiert. In Grafik 5.1 bezeichnet rot den Widerstandskoeffizienten<br />

und blau den Auftriebskoeffizienten. Man sieht <strong>auf</strong> den ersten Blick, dass der<br />

Strömungsabriss nicht sehr realistisch ist. Hier besteht sicher noch Verbesserungspotential.<br />

Ein Schwachpunkt des Modells ist, dass diese Diagramme bei allen Flügeln gleich<br />

aussehen. Das liegt daran, dass die Koeffizientenrechnung <strong>auf</strong> der Gleichung 3.36 <strong>auf</strong><br />

Seite 27 basiert und die Geometrie des Flügels nur mit seinen Ausmassen definiert ist.<br />

In gewissem Sinne ist dieses Resultat bedrückend. Der ganze Aufwand, der in Abschnitt<br />

3.5.3 <strong>auf</strong> Seite 27 gemacht wurde ist im Grunde genommen für die Katz’. Glücklicherweise<br />

heisst das nun nicht, dass sich alle Flugzeuge im Spiel gleich fliegen. Es ist trotzdem<br />

möglich unterschiedliche Flugzeuge zu simulieren, indem man die Flügel, Antriebe und<br />

Volumina anders platziert, dimensioniert oder zusätzlich hinzufügt. Somit kann man sagen,<br />

dass dies das Simulationserlebnis nicht zu sehr trübt und ich vermute nur geübten<br />

Fliegern <strong>auf</strong>fallen wird, wenn überhaupt.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 45


Kapitel 5. Ergebnisse zur Koeffizientenberechnung<br />

Abbildung 5.1: Auftrieb- und Widerstandskoeffizienten<br />

Abbildung 5.2: Polardiagramm<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 46


Kapitel 6<br />

Ausblick<br />

So gerne ich auch an diesem Projekt arbeitete, konnte ich aus Zeitgründen nicht alle<br />

geplanten Funktionen implementieren.<br />

• Detaillierte Flugzeugmodelle (Instrumente im Cockpit, Fahrwerk)<br />

• Ansprechende Menüführung, Konfiguration<br />

• Multiplayer über Netzwerk & Internet<br />

• Spiellogik (Geschichte, Missionen), Spielelemente (Raketenflugkörper, Bodeneinheiten)<br />

• Bessere Grafik (3D-Wolken, Regen/Schnee)<br />

Ich überlege zurzeit, ob ich dieses Projekt als Teamprojekt weiterführen soll. Vielleicht<br />

finden sich ein paar Menschen, welche Lust haben, einen Teil ihrer Freizeit in die Weiterentwicklung<br />

des Spiels zu stecken.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 47


Kapitel 7<br />

Reflexion<br />

Die grösste Hürde am Erarbeiten der gesamten Arbeit war nicht das Programmieren,<br />

oder die Dokumentation. Das Schwierigste war, geeignete Lektüre zu finden. Das Spektrum<br />

ging von Fluiddynamik mit kompressiblen, viskosiven Flüssigkeiten/Gasen bis zu<br />

einfachen Aufgaben im Physikunterricht. Entweder viel zu rechenintensiv, <strong>auf</strong>wändig und<br />

unnötig genau oder viel zu einfach, um damit allgemeine Flugsituationen in Echtzeit zu<br />

simulieren. Aus diesem Grund begann ich aus all den Quellen und etwas Kreativität<br />

etwas zusammenzubasteln. Als ich dann mein Projekt im Oktober 2009 bei Schweizer<br />

Jugend forscht angemeldet habe, wurde mir ein Experte namens Dr. Jürg Müller zugeteilt,<br />

welcher mir meine Fragen besser als jedes Buch beantworten konnte.<br />

Man kann hier natürlich noch nicht von <strong>einem</strong> fertigen Softwareprodukt sprechen.<br />

Dafür fehlen die Spielinhalte wie zum Beispiel Grafiken, Sounds und eine spannende<br />

Geschichte. Das alles wäre aber in der kurzen Zeit von knapp <strong>einem</strong> Jahr auch nicht erreichbar.<br />

An <strong>einem</strong> Softwareprojekt könnte man jahrelang daran arbeiten. Rückblickend<br />

<strong>auf</strong> das vergangene Jahr gab es einige harzige Zeiten und ich musste mehrmals von vorne<br />

beginnen. Dabei konnte ich jedoch Erfahrungen sammeln, die ich nicht missen möchte.<br />

Nun — ich würde Sie anlügen, wenn ich sagen würde, dass ich nicht Stolz <strong>auf</strong> meine<br />

Arbeit bin.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 48


Kapitel 8<br />

Danksagung<br />

Ich möchte mich speziell bei folgenden Personen für ihre beratende Funktion, ihre unermüdliche<br />

Geduld und ihre inspirierende Ideen bedanken:<br />

• Herr Dr. Franz Müller Mein Betreuer und Lehrer in Physik.<br />

• Herr Dr. Jürg Müller Experte im Rahmen meiner Teilname am Schweizer Jugend<br />

forscht Wettbewerb. Aerodynamiker bei der Ruag Aerospace.<br />

• Frau Susan Schuler Korrektorin meiner Arbeit und Lehrerin an der Oberstufe<br />

Schänis.<br />

Ausserdem:<br />

• Meine wunderbare Klasse Für die ermutigenden Worte und tollen Ideen, von denen<br />

ich einige aus Zeitgründen leider (noch) nicht umsetzen konnte.<br />

• Meine engen Freundinnen und Freunde Für ihre Geduld, Unterstützung und meisterhafte<br />

Fähigkeit so zu tun, als würden sie meinen Ausführungen zwar folgen<br />

wollen, aber nur Bahnhof verstehen, trotzdem nicken und zustimmen.<br />

• Meine Familie Für ihre Geduld, besonders wenn ich verspätet zum Nachtessen<br />

komme. Da ich unbedingt noch was ausprobieren musste!<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 49


Kapitel 9<br />

Deklaration zur Eigenständigkeit<br />

Ich habe die vorliegende Abschlussarbeit unter Benützung der angeführten Quellen selbständig<br />

entworfen, gestaltet und geschrieben.<br />

Elio Gubser<br />

Walenstadt, 8. März 2010<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 50


Quellenverzeichnis<br />

[1] Beginner’s Guide to Aerodynamics. NASA Glenn Research Center. Aerodynamics<br />

Index http://www.grc.nasa.gov/WWW/K-12/airplane/short.html<br />

Abrufdatum: 15. August 2009<br />

[2] Beginner’s Guide to Aerodynamics. NASA Glenn Research Center. Theories<br />

of Lift http://www.grc.nasa.gov/WWW/K-12/airplane/lift1.html Abrufdatum:<br />

18. September 2009<br />

[3] Grundlagen der Flugtechnik. Skript zur Vorlesung an der ETH Zürich von Dr.<br />

Jürg Wildi. Teil I 2009<br />

[4] Ausgewählte Kapitel der Flugtechnik. Skript zur Vorlesung an der ETH Zürich<br />

von Jürg Wildi. Teil II/Sommersemester 2009<br />

[5] An Introduction to Physically Based Modeling: Unconstrained Rigid Body<br />

Dynamics. Skript zur Vorlesung an der Carnegie Mellon University von David<br />

Baraff 19997 http://www.cs.cmu.edu/~baraff/sigcourse/ Abrufdatum 24.<br />

Dez 2009<br />

[6] Kraft & Drehmoment. Skript Physikschwerpunktunterricht von Prof. Dr. Franz<br />

Müller Schuljahr: 2009<br />

[7] Vektorgeometrie & lineare Abbildungen. Skript Matheschwerpunktunterricht<br />

von Prof. Dr. Jakob Brunner Schuljahr: 2009<br />

[8] Skript zur Vorlesung Aerodynamik des Flugzeugs. Prof. Dr.-Ing. Peter R. Hakenesch<br />

Version 1.5 http://www.lrz-muenchen.de/~hakenesch/aerodynamik/<br />

aerodynamik.html Abrufdatum: 19. Juni 2009<br />

[9] Enzyklopädieeintrag über das Trägheitsmoment<br />

http://de.wikipedia.org/wiki/Trägheitsmoment Abrufdatum: 20. Dez<br />

2009<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 51


Quellenverzeichnis<br />

[10] Enzyklopädieeintrag über den Trägheitstensor<br />

http://de.wikipedia.org/wiki/Trägheitsmoment Abrufdatum: 20. Dez<br />

2009<br />

[11] Enzyklopädieeintrag über das Trägheitsmoment http://en.wikipedia.org/<br />

wiki/Moment_of_inertia Abrufdatum: 20. Dez 2009<br />

[12] Enzyklopädieeintrag über den Gimbal Lock http://en.wikipedia.org/wiki/<br />

Gimbal_lock Abrufdatum: 13. Jan 2010<br />

[13] Diese Hand wurde in die Abb. 3.2 eingebaut. Lizenz: Public Domain<br />

http://commons.wikimedia.org/wiki/File:Right-hand_grip_rule.svg<br />

Abrufdatum: 06. Oktober 2009<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 52


Abbildungsverzeichnis<br />

1.1 Landschaft aus grosser Entfernung . . . . . . . . . . . . . . . . . . . . . . 6<br />

1.2 Propellerflugzeug (Arbeitstitel: Bignose) . . . . . . . . . . . . . . . . . . . 6<br />

1.3 Propellerflugzeug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.4 Düsenjäger (Arbeitstitel: Fighter) . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.5 Cockpit des Propellerflugzeugs . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

1.6 Cockpit des Düsenjägers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

1.7 Propellerflugzeug im Modeller . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

1.8 Düsenjäger im Modeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

1.9 Düsenjäger im Modeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.1 Skipping Stones Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.2 Venturi Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.3 Longer Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Turning Fluid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.5 Strömungsabriss / Stall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.6 Formwiderstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.7 Reibungswiderstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.8 Induzierter Widerstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.9 Unterschiedliche Trägheit bei unterschiedlicher Rotationachse . . . . . . . 16<br />

2.10 Welt- und Flugzeugkoordinatensystem . . . . . . . . . . . . . . . . . . . . 16<br />

2.11 Orientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.12 Bestandteile <strong>eines</strong> Flugzeugs . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.1 Drehmoment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.2 Rechte Daumen Regel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.3 Gimbal Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

3.4 Trägheitsmoment aus Massepunkten . . . . . . . . . . . . . . . . . . . . . 23<br />

3.5 Massepunkte und Abstand in der 3. Dimension . . . . . . . . . . . . . . . 24<br />

3.6 Rotation damit g <strong>auf</strong> Y zu liegen kommt. . . . . . . . . . . . . . . . . . . 24<br />

3.7 Volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

3.8 Auftrieb- und Widerstandsdiagramm . . . . . . . . . . . . . . . . . . . . . 28<br />

3.9 Polardiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.10 Definition <strong>eines</strong> Flügel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.11 Anstellwinkel und Kraftrichtungsvektoren . . . . . . . . . . . . . . . . . . 30<br />

3.12 Auftriebsrichtungsvektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.13 Widerstandsfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 53


Abbildungsverzeichnis<br />

3.14 Schnitt Σ mit Ψ gibt k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.15 Kreuzprodukt v × k gibt m . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.16 Die Projektion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.17 Flussdiagramm Strömungsabriss . . . . . . . . . . . . . . . . . . . . . . . 35<br />

3.18 Auftriebspolare mit Strömungsabriss . . . . . . . . . . . . . . . . . . . . . 35<br />

3.19 Defintion <strong>eines</strong> Antriebes . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

4.1 Überblick über den Simulationsprozess . . . . . . . . . . . . . . . . . . . . 38<br />

4.2 Vererbung und Verweise der Simulation . . . . . . . . . . . . . . . . . . . 40<br />

4.3 Schema des Eingabe Modules . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

5.1 Auftrieb- und Widerstandskoeffizienten . . . . . . . . . . . . . . . . . . . . 46<br />

5.2 Polardiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 54


Anhang A<br />

Datenträger<br />

Auf dieser CD befindet sich der Source Code des <strong>Flugsimulators</strong>, einige Screenshots<br />

und ein paar Filme. Zum Zeitpunkt dieser Arbeit ist das Programm nur <strong>auf</strong> Linux<br />

l<strong>auf</strong>fähig, sollte aber unter gewissem Aufwand <strong>auf</strong> Windows und Mac portierbar sein. Es<br />

ist eigentlich noch nicht komplett und nicht <strong>auf</strong> eine Veröffentlichung vorbereitet. Das<br />

Ganze soll vorwiegend dem weiteren Studium dienen.<br />

<strong>Entwicklung</strong> <strong>eines</strong> <strong>Flugsimulators</strong> <strong>basierend</strong> <strong>auf</strong> <strong>einem</strong> physikalischen Modell 55

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!