Gravitationsgesetz – die neusten Beiträge

Stimmt diese Planetenlaufbahn-Approximation?

Heyy ich versuche seit einiger Zeit mit Python eine Animation für die Laufbahn von der Erde zu erstellen, aber ich wundere mich, ob mein Ansatz stimmt. 🤔

Ich will ein Python Programm erstellen, wo ich den Exponenten des Radius im Gravitationsgesetz ändern und somit neue Umlaufbahnen zeichnen kann. Dabei stütze ich mich auf die Formel: F = G * (m1 * m2)/r^x. Ich bin mir nicht sicher, ob mein Programm korrekte Laufbahnen zeichnet, da ich nicht sonderlich gut in Physik bin. Der Grundgedanke kann ich nachvollziehen: Bei abnehmender Kraft, wird die Umlaufbahn grösser. Aber ist es normal, dass die Umlaufbahn der Erde bei einer kleinen Exponenten-Änderung von 2 auf 2.02 so viel grösser wird? Falls ja, warum ist das so?

Danke im Voraus für eure Hilfe! 😊

LG Leonie

Ein Quadrat entspricht hier einer astronomischen Einheit.

Hier ist mein Programm:

Ich verwende für meine Animation pygame.

import pygame
import sys
import math

Das sind die Konstanten, die ich verwende und die Startwerte:

G = 6.67430e-11
M_SUN = 1.989e30 
M_EARTH = 5.972e24
AU = 1.496e11
TIME_STEP = 43200
x = AU
y = 0
vx = 0
vy = 29780
exp_r = float(input"Exponent:"))

Die Erstellung des Fensters:

pygame.init()
WIDTH, HEIGHT = 800, 800
SCALE = WIDTH / (20 * AU)  # Maßstab für die Darstellung
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

Mit RK4 approximiere ich die Laufbahn der Erde. Hier sind die Funktionen:

def runge_kutta4(t, state, dt):
    k1 = deriv(t, state)
    k2 = deriv(t + 0.5 * dt, [state[i] + 0.5 * dt * k1[i] for i in range(4)])
    k3 = deriv(t + 0.5 * dt, [state[i] + 0.5 * dt * k2[i] for i in range(4)])
    k4 = deriv(t + dt, [state[i] + dt * k3[i] for i in range(4)])
    return [state[i] + (dt / 6) * (k1[i] + 2 * k2[i] + 2 * k3[i] + k4[i]) for i in range(4)]

def draw_grid():
    grid_size = AU * SCALE
    half_width = WIDTH // 2
    half_height = HEIGHT // 2
 
    for i in range(-19, 20):
        x_pos = int(half_width + i * grid_size)
        pygame.draw.line(screen, (50, 50, 50), (x_pos, 0), (x_pos, HEIGHT))
 
    for i in range(-19, 20):
        y_pos = int(half_height + i * grid_size)
        pygame.draw.line(screen, (50, 50, 50), (0, y_pos), (WIDTH, y_pos))

Hauptschleife:

running = True
t = 0
earth_path = []


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    state = [x, y, vx, vy]
    x, y, vx, vy = runge_kutta4(t, state, TIME_STEP)
    t += TIME_STEP

    draw_x = int(WIDTH / 2 + x * SCALE)
    draw_y = int(HEIGHT / 2 + y * SCALE)
    earth_path.append((draw_x, draw_y))

    screen.fill((0, 0, 0))
    draw_grid()
    pygame.draw.circle(screen, (255, 255, 0), (WIDTH // 2, HEIGHT // 2), 20)
    pygame.draw.circle(screen, (0, 0, 255), (draw_x, draw_y), 5)

    for px, py in earth_path:
        pygame.draw.circle(screen, (0, 255, 0), (px, py), 1)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()
Bild zum Beitrag
Erde, Schule, Mathematik, programmieren, Astronomie, Code, Gravitation, Informatik, Physik, Programmiersprache, Python, Universität, Approximation, Gravitationskraft, Newtonsche Gesetze, Pygame, Gravitationsgesetz

Meistgelesene Beiträge zum Thema Gravitationsgesetz