Seite 1 von 1

Sonnensystem

Verfasst: Mittwoch 1. September 2021, 19:17
von k-net
Hallo,

ich habe ein Mini-Sonnensystem nachgebaut. Zum Spaß und als Übung. Natürlich nicht mit den realen Gravitationskräften.
Meine Frage an euch: Wie hättet ihr es gemacht? Welche Verbesserungen im Code würdet ihr vornehmen?

Code: Alles auswählen

import pygame as pg
import math

pg.init()
breite = 1000
hoehe = 1000
zentrum_x = breite / 2
zentrum_y = hoehe / 2
mitte = zentrum_x, zentrum_y

screen = pg.display.set_mode((breite, hoehe))
pg.display.set_caption('Solar')

#Farben
black = (0, 0, 0)
white = (255, 255, 255)
blue = (0, 0, 255)
yellow = (255, 255, 0)

weitermachen = True
clock = pg.time.Clock()

winkel_erde = 0
winkel_mond = 0

orbit_erde = zentrum_x * 0.6
orbit_mond = 50

while weitermachen:
    clock.tick(60)
    for ereignis in pg.event.get():
        if ereignis.type == pg.QUIT:
            weitermachen = False
    screen.fill((0, 0, 0))

    winkel_erde += 0.02
    winkel_mond += 0.05

    erde = orbit_erde * math.cos(winkel_erde) + zentrum_x, orbit_erde * math.sin(winkel_erde) + zentrum_y
    mond = orbit_mond * math.cos(winkel_mond) + orbit_erde * math.cos(winkel_erde) + zentrum_x, orbit_mond * math.sin(winkel_mond) + orbit_erde * math.sin(winkel_erde) + zentrum_y

    pg.draw.circle(screen, blue, erde, 20)
    pg.draw.circle(screen, white, mond, 10)
    pg.draw.circle(screen, yellow, mitte, 50, 0)

    pg.display.flip()

pg.quit()

Gruß und Dank!

Re: Sonnensystem

Verfasst: Mittwoch 1. September 2021, 19:30
von __deets__
Neben den ueblichen Hinweisen - keine globalen Variablen, KONSTANTEN werden gross geschrieben - faellt vor allem eines auf: das waere ein super Problem, um mit Objekten zu arbeiten. Statt fuer alles, was du so an Sonnensystembewohnern hast, einen Haufen Variablen und einen Haufen Berechnungen hinzupinnen, waere eine Hierarchie von Objekten (Sonne an der Wurzel, Planeten sind Kinder der Sonne, Monde Kinder der Planeten) gut.

Und dann noch ein klassischer Fehler: so zu tun, als ob man mit jedem Schritt der Simulation einen gleichmaessigen Zeitschritt taetigt. Das stimmt nicht, wenn der PC mal etwas rumroedelt, dauert es auch mal laenger.

Stattdesse berechnet man Animationen anhand der wirklich verflossenen Zeit.

Re: Sonnensystem

Verfasst: Mittwoch 1. September 2021, 22:04
von __blackjack__
Ergänzend `Rect`-Objekte haben eine Menge praktischer Attribute und es gibt `pygame.math.Vector2`. Man muss nicht alles selbst ausrechnen.