Planeten Rotationen?

Janares

Mitglied
Hallo ich will ein Programm schreiben welches die Planeten bahnen der erde und des Mars darstellt dafür hab ich eine Do Loop schleife geschrieben welche dafür sorgt das sich die erde um ein shape das die Sonne symbolisiert dreht.
Nur wenn ich die rotation des mars erstellen will passiert immer folgendes:

Und zwar wird beim start des programms die bahn der erde richtig dargestellt der mars landet aber ganz links oben im fenster.

Was mache ich falsch?

Dim i&, j&, Rad&

Haupt.ScaleMode = 3
Rad = 200
Do
For i = 0 To 8 * Atn(1) * Rad - 1
Haupt.Erde.Move 220 + Rad * Sin(i / Rad), 230 + Rad * Cos(i / Rad)
Rad =230
Haupt.Mars.Move 220 + Rad * Sin(i / Rad), 230 + Rad * Cos(i / Rad)
For j = 1 To 200
DoEvents
Next
Next i

Loop
 
Hab deinen Code mal getestet, Erde und Mars liegen genau aufeinander.
Verwende mal für beide einen unterschiedlichen Radius. :)
 
Also ich habe VB6 und das funktioniert wunderbar, hab mal das Projekt hochgeladen, vielleicht hab ich irgendeinen Unterschied übersehen.

Der ZIP-Datei liegt auch ein Screenshot bei auf dem ich die ungefähre Umlaufbahn eingezeichnet hab wie es bei mir aussieht.
 

Anhänge

  • planeten umlaufbahn.zip
    21,2 KB · Aufrufe: 83
Ich habe da jetzt noch zwei Probleme erstens wie lasse ich die Planeten auf einer Ellipse laufen und zweitens, ist mir aufgefallen das auf manchen pc's die Planeten extrem schnell rotieren ich wollt nun Fragen wie ich die geschwiindigkeit einstellen kann?
 
Ich hab jetzt keinen Code zur Hand, kann aber mein Schulwissen (Mann, ist das lang her) mal kurz einfließen lassen:

Eine Ellipse besitzt ja 2 Brennpunkte (P1x, P1y; P2x, P2y) und einen Durchmesser (d). Die maximale Länsausdehnung ist d, die maximale Höhe hängt vom Abstand der beiden Brennpunkte ab (d - Strecke(P1,P2)). Weiters ist ein jeder Punkt einer Ellipse so weit von den beiden Brennpunkten entfernt, dass die Summe der Entfernungen maximal dem Durchmesser d entspricht. Da sollte doch formelmäßig was zu machen sein.

Ansonsten bietet sich Google an. Wenn ich was habe, poste ich es (solange nicht vorher jemand anders was postet).


Der Doc!
 
Ich habe da jetzt noch zwei Probleme erstens wie lasse ich die Planeten auf einer Ellipse laufen und zweitens, ist mir aufgefallen das auf manchen pc's die Planeten extrem schnell rotieren ich wollt nun Fragen wie ich die geschwiindigkeit einstellen kann?
Also zunächst zum einfachern:
Das Problem mit der Geschwindigkeit, kannst du z.B. folgendermassen lösen.
Du hast eine Hauptschleife, in der sich die Planeten alle um ein Pixel weiterbewegen. (je nach Umlaufbahndurchmesser sind das ja unterschliedlich viele und somit sollte auch die Umlaufgeschwindigkeit der einzelnen Planeten einigermassen passen). Dann kannst du ja Festlegen, das ein Schleifendurchlauf nicht schneller als sagen wir mal 100 Millisekunden ist. Das heißt, daß sich jeder Planet in der Sekunde um 10 Pixel auf seiner Umlaufbahn bewegt. sollte die Hauptschleife vor eben diesen 100 Millisekunden "fertig" sein, dann wartest du einfach am Ende der Schleife die Differenz zu den 100 Millisekunden ab und fängst danach erst mit dem nächsten Schleifendurchgang an.

Das Problem mit den Ellipsen ist da schon etwas schwieriger.
Du musst die Punkte auf der Ellipse berechnen, zumindest auf einem Viertel (1/4) der Ellipse, die anderen können dann gespiegelt werden. Zum Berechnen von Punkten auf einer Ellipse hab ich interessehalber mal etwas bei Google gesucht. (war net einfach was zu finden). Da bin ich auf folgende Seite gestossen, die meiner Meinung nach sehr gut erklärt ist: Bresenham Algorithmen
Du berechnest am besten die Punkte nur einmal vor und speicherst sie dir in einer geeigneten Datenstruktur (Performance Gründe). Wie gesagt den restlichen 3/4 Teil der Ellipse kannst du einfacher berechnen.

Allerdings, denke ich das du mit der Ganzen Berechnung bei Visual Basic sehr schnell Probleme mit der Geschwindigkeit bekommen wirst. Außerdem wird das mit der Syncronisation der einzelnen Planeten auch kein Zuckerschlecken.
Ich hoffe das hat dir weitergeholfen.

Da mich dein Projekt mittlerweile interessiert, würde es mich freuen, wenn du uns auf dem Laufenden hältst.

Gruss Homer
 
Zurück