Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kreise die um kreise kreisen
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 22.04.2008, 23:26    Titel: Antworten mit Zitat

Hallo

Ich hätte da noch einen Vorschlag zur Bahnberechnung. Du könntest die Planeten sich auch dem Gravitationsgesetz folgend bewegen lassen. Hört sich kompliziert an, ist aber eigentlich auch nicht schwerer, als Punkte auf einer Kreisbahn zu berechnen. Mein Programmbeispiel (das allerdings in QB geschrieben ist, soll aber auch nur ne Anregung sein) kommt sogar ohne SIN und COS aus zwinkern

Ausserdem bekommt man so realistische Bewegungen auch auf elliptischen Bahnen, man kann Monde einbauen etc. ohne an der Berechnung selbst etwas zu ändern. Für zusätzliche Planeten müssen nur entsprechende Startwerte eingesetzt werden. Es ist übrigens gar nicht so einfach, ein stabiles Planetensystem zu erstellen. Etwas Spielen mit den Startwerten zeigt das.

Code:
SCREEN 12
CLS

k& = 0                     'Zeiteinheit dt an die Rechner-
t = TIMER                  'geschwindigkeit anpassen
DO: LOOP WHILE t = TIMER
t = TIMER
DO
 k& = k& + 1
LOOP WHILE t = TIMER
dt = 50 / k&

g = .0001                  'Gravitationskonstante
planeten = 3               'Anzahl der Planeten

                           'Startwerte

                           'Stern
m(0) = 1500                'Masse
X(0) = 320                 'X-Position
y(0) = 240                 'Y-Position
vx(0) = 0                  'Geschwindigkeit in X-Richtung
vy(0) = 0                  'Geschwindigkeit in Y-Richtung

m(1) = 10                  'grosser Planet
X(1) = 170
y(1) = 240
vx(1) = 0
vy(1) = .03

m(2) = .01                 'Mond des grossen Planeten
X(2) = 165
y(2) = 240
vx(2) = 0
vy(2) = .045
                           'kleiner Planet
m(3) = 2
X(3) = 320
y(3) = 20
vx(3) = -.01
vy(3) = 0

DO                              'Bewegen
                                'Jeder Koerper zieht jeden an
 FOR a = 0 TO planeten
  FOR b = 0 TO planeten
   IF a <> b THEN               'ausser sich selbst
    dx = X(a) - X(b)            'X-Abstand
    dy = y(a) - y(b)            'y-Abstand
    dq = dx ^ 2 + dy ^ 2        'Abstand im Quadrat
    d = SQR(dq)                 'Abstand
    f = -g * m(a) * m(b) / dq   'Gravitationskraft berechnen
    fx = f * dx / d             'Kraft in X-Richtung
    ax = fx / m(a)              'Beschleunigung in X-Richtung
    vx(a) = vx(a) + ax * dt     'Geschwindigkeitsaenderung in X-Richtung
    fy = f * dy / d             'Kraft in Y-Richtung
    ay = fy / m(a)              'Beschleunigung in Y-Richtung
    vy(a) = vy(a) + ay * dt     'Geschwindigkeitsaenderung in Y-Richtung
   END IF
  NEXT
 NEXT
 
 FOR a = 0 TO planeten          'Anzeigen
  PSET (X(a), y(a)), 0          'alte Position loeschen
 NEXT

 FOR a = 0 TO planeten
  X(a) = X(a) + vx(a) * dt      'neue X-Position berechnen
  y(a) = y(a) + vy(a) * dt      'neue Y-Position berechnen
  PSET (X(a), y(a)), 15         'Punkt an neue Position setzen
 NEXT

LOOP WHILE INKEY$ = ""          'Beenden mit beliebiger Taste


Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz