IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Kreisbahn-Berechnung und Simulation der Erdanziehungskraft in VB



Kreisbahn-Berechnung und Simulation der Erdanziehungskraft in VB

Dieser Artikel zeigt, wie man eine Kreisbahn berechnet und die Erdanziehungskraft simuliert. Anhand von zwei Beispielen in VB werden die Funktionsweisen verdeutlicht.


Autor: Tobias Surmann (incsoft)
Datum: 31-03-2003, 18:43:03
Referenzen: http://www.vbDirectX.de
Schwierigkeit: Profis
Ansichten: 13671x
Rating: 10 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Thema: Berechnung einer Kreisbahn

Wozu benötigt man die Berechnung einer Kreisbahn? Nehmen wir an, ihr wollt z.B. ein Shoot 'em Up im Weltraum programmieren. Damit der Spieler vor den Angriffen der Aliens geschützt ist erhält er drei Schilde, die um ihn herum wirbeln. Falls nun eines der Schilde von einem gegnerischen Schuss getroffen wird, verpufft es, und der Spieler ist nicht mehr allzu gut geschützt.

Nun zur Programmierung. Fangen wir erstmal mit einem Schild an. Wenn ihr einmal das Prinzip verstanden habt, könnt ihr euch so viele Schilde machen, wie ihr wollt. Außerdem könnt ihr den Quellcode in einem Beispielprojekt und dieses Tutorial noch downloaden. Ok, zuerst brauchen wir einen Timer, der die Position der umherfliegenden Schilde aktualisiert. Dann definieren wir einen Radius, sagen wir 1000 Twips. Außerdem brauchen wir noch einen Winkel, zu dem das Schild um den Spieler herumfliegt. Diesen Wert müssen wir als Static speichern, damit wir ihn bei jedem Durchgang erhöhen können, um so jedes Mal die Position des Schildes auf der Bahn etwas zu verschieben. Überschreitet der Winkel die 360° Grenze setzen wir den Winkel-Wert einfach wieder auf 0° und ein neuer Kreis beginnt.

Jetzt sind alle Werte für die Formel zur Kreisbahnberechnung definiert.

Schild.X = Radius * Cos(Winkel) + Spieler.X
Schild.Y = Radius * Sin(Winkel) + Spieler.Y

Um das Schild in die andere Richtung kreisen zu lassen, vertauschen wir einfach nur die Cos bzw. die Sin - Funktion miteinander:

Schild.X = Radius * Sin(Winkel) + Spieler.X
Schild.Y = Radius * Cos(Winkel) + Spieler.Y

Hier der gesamte Quellcode, der einen umherfliegenden Schild erzeugt:

Private Sub Timer1_Timer() 

'Die Timer- Prozedur berechnet die neue Position
'der einzelnen Objekte 

Static RADIUS 

'Radius für den inneren Kreis
RADIUS = 1000 

'Counter
Static c
Static winkel

'Beim ersten Durchgang werden die Winkelwerte
'für die einzelnen Objekte festgelegt

'HINWEIS: Zum besseren Verständnis verzichte ich auf
' eine Quellcode-Optimierung mit Arrays

c = c + 1
If c = 1 Then
winkel = 90
End If

'Bei jeder Aktualisierung wird der Winkel etwas größer

winkel = winkel + 0.2 

'Wenn der Winkel größer als 360° wird, setzen wir ihn
'einfach wieder auf 0

If winkel >= 360 Then winkel = 0

'Wir berechnen die Kreisbahn
'nach den beiden Formeln:
'Objekt.X = Radius * Cos(Winkel) + Mitte.X
'Objekt.Y = Radius * Sin(Winkel) + Mitte.Y

'kreis = schild 

kreis.Left = radius2 * Cos(winkel) + player.Left
kreis.Top = radius2 * Sin(winkel) + player.Top

End Sub 

Thema: Erdanziehungskraft simulieren

In vielen Spielen wird die Simulation von physikalischen Gegebenheiten erforderlich. In diesem Abschnitt werden wir herausfinden, wie wir die Simulation einer Anziehungskraft in unser Spiel implementieren können.

Nehmen wir beispielsweise das alte DOS-Spiel Gorillas. In diesem Spiel muss man versuchen durch Angabe von Winkel und Geschwindigkeit die Flugbahn einer Banane abzuschätzen, sodass diese den Gegner trifft. Die Flugbahn ist dabei eine geschwungene Linie (Parabel) und keine Gerade.

Für die Berechnung der Position des Wurfobjekts zu einem bestimmten Zeitpunkt benötigen wir folgende Variablen:

Public Const Pi As Double = 3.1415926
Dim angle As Double 'Winkel
Dim tmax As Double 'Zeit
Dim g As Double 'Konstante für Anziehungskraft
Dim v0 As Double 'Abwurfgeschwindigkeit
Dim x As Integer 'Position auf der X-Achse
Dim y As Integer 'Position auf der Y-Achse

Daraus resultiert folgender Funktionskopf für eine Funktion, die die komplette Flugbahn des Wurfobjekts berechnet und zeichnet.

Public Sub ShowFlight(Output As Object, angle As Double, tmax As Double, steps As Double, g As Double, v0 As Double)

End Sub

Output ist ein Objekt, dass die PSet-Methode unterstützt, also z.B. eine PictureBox oder eine Form auf dem die Ausgabe stattfindet. Mit tmax und steps geben wir die Zeit und deren Genauigkeit an. Die Variable g können wir bei Aufruf der Prozedur immer auf 9.81 setzen. Dieser Wert entspricht der Erdanziehungskraft.

Für die Berechnung der Koordinaten des Wurfobjekts und das Zeichnen eines Punkts an dieser Stelle ist folgender Quelltext nötig:

Dim x As Integer
Dim y As Integer
Dim t As Double 

For t = 1 to tmax Step steps 

x = v0 * t * Cos(angle)
y = v0 * t * Sin(angle) - g * t ^ 2 / 2 

Output.PSet(x, y) 

Next t 

Da wir die Koordinaten zu einem bestimmten Zeitpunkt nach dem Abwurf des Objekts berechnen möchten, simulieren wir die Zeit mit einer Schleife. Die Formeln für die X- und Y-Position des Objekts findet man übrigens in jedem Physikbuch oder in einer Formelsammlung. Zum Schluss wird über das Ausgabeobjekt an den entsprechenden Koordinaten ein Punkt erzeugt.

Beim Aufruf der Funktion sollte man lediglich darauf achten, dass der Winkel angle in Rad angegeben werden muss.

Natürlich könnte man an dem errechneten Koordinatenpaar nun auch Grafiken oder Text ausgeben. Die erarbeitete Funktion können wir durch kleine Veränderungen auch in einer DirectDraw-Anwendung einsetzen. Um das Beispiel zu vereinfachen habe ich aber hier darauf verzichtet.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1151
Comments: 0