Python pygame

Kugelstoß Simulation mit Pygame

Der Kugelwurf oder auch Wurfparabel ist eine klassische Bewegung in der Physik, die zwei Dimensionen beinhaltet: eine horizontale und eine vertikale. Diese Bewegung lässt sich beschreiben durch die Kombination eines gleichförmigen Bewegungsanteils in der horizontalen Richtung (keine Beschleunigung) und einer gleichmäßig beschleunigten Bewegung in der vertikalen Richtung (durch die Schwerkraft).

Bernd Fischer
3 Minuten Lesezeit
16 Okt 2024

Die wichtigsten physikalischen Größen beim Kugelwurf sind:

  • Startgeschwindigkeit \( v_0 \): Die Geschwindigkeit, mit der das Objekt geworfen wird.

  • Wurfwinkel \( \theta \): Der Winkel, unter dem das Objekt relativ zur horizontalen Achse geworfen wird.

  • Beschleunigung durch die Schwerkraft \( g \approx 9.81 \, \text{m/s}^2 \).

  • Zeit \( t \): Die Zeit, die seit dem Wurf vergangen ist.

Hier sind die Formeln für alle vier wichtigen Parameter des Kugelwurfs: Flugzeit, maximale Höhe, Flugweite und Endgeschwindigkeit.

1. Flugzeit (\( t_{\text{total}} \))

Die gesamte Flugzeit ist die Zeit, die die Kugel in der Luft bleibt, bis sie wieder den Boden erreicht.

\[ t_{\text{total}} = \frac{2 \cdot v_0 \cdot \sin(\theta)}{g} \]

  • \( v_0 \) = Anfangsgeschwindigkeit (m/s)
  • \( \theta \) = Wurfwinkel (in Grad)
  • \( g \) = Erdbeschleunigung (ca. 9.81 m/s²)

2. Maximale Höhe (\( y_{\text{max}} \))

Die maximale Höhe ist die höchste Position, die die Kugel erreicht, bevor sie wieder zu Boden fällt.

\[ y_{\text{max}} = \frac{(v_0 \cdot \sin(\theta))^2}{2 \cdot g} \]

Hier verwenden wir nur die vertikale Komponente der Anfangsgeschwindigkeit \( v_0 \cdot \sin(\theta) \), da nur diese zur Höhenänderung beiträgt.

3. Flugweite (\( x_{\text{max}} \))

Die Flugweite ist die horizontale Distanz, die die Kugel zurücklegt, bis sie wieder den Boden erreicht.

\[ x_{\text{max}} = \frac{v_0^2 \cdot \sin(2\theta)}{g} \]

  • Der Term \( \sin(2\theta) \) zeigt, dass der maximale Wurf bei einem Winkel von \( \theta = 45^\circ \) erreicht wird.

4. Endgeschwindigkeit

Die Endgeschwindigkeit kann in zwei Komponenten aufgeteilt werden: die horizontale Geschwindigkeit (bleibt konstant) und die vertikale Geschwindigkeit (ändert sich aufgrund der Schwerkraft).

Horizontale Endgeschwindigkeit:

\[ v_{x} = v_0 \cdot \cos(\theta) \]

Vertikale Endgeschwindigkeit:

Die vertikale Geschwindigkeit ändert sich aufgrund der Beschleunigung durch die Schwerkraft. Am Endpunkt (also bei Aufprall) ist die vertikale Endgeschwindigkeit: \[ v_{y} = v_0 \cdot \sin(\theta) - g \cdot t_{\text{total}} \]

Gesamte Endgeschwindigkeit (\( v_{\text{end}} \)):

Die gesamte Endgeschwindigkeit kann durch den Satz des Pythagoras berechnet werden, da sie die Kombination aus horizontaler und vertikaler Geschwindigkeit ist:

\[ v_{\text{end}} = \sqrt{v_{x}^2 + v_{y}^2} \]

Das ergibt die Endgeschwindigkeit der Kugel unmittelbar bevor sie den Boden erreicht.

Pygame Simulation

import pygame
import math

# Initialisiere Pygame
pygame.init()

# Fenstergröße
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Kugelwurf Simulation')

# Farben
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# Physikalische Konstanten
g = 9.81  # Erdbeschleunigung in m/s²

# Kugelparameter
x0, y0 = 50, height - 50  # Startposition (linke untere Ecke)
v0 = 100  # Startgeschwindigkeit in Pixel/s
angle = 45  # Wurfwinkel in Grad
v0x = v0 * math.cos(math.radians(angle))  # Horizontale Geschwindigkeit
v0y = v0 * math.sin(math.radians(angle))  # Vertikale Geschwindigkeit
t = 0  # Zeit in Sekunden
dt = 1 / 25  # Zeitschritt in Sekunden (25 Frames pro Sekunde)

# Clock-Objekt, um die FPS zu kontrollieren
clock = pygame.time.Clock()

# Simulations-Loop
running = True
while running:
    screen.fill(WHITE)

    # Beende das Programm, wenn das Fenster geschlossen wird
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Kugelposition basierend auf den Gleichungen des Kugelwurfs
    x = x0 + v0x * t
    y = y0 - (v0y * t - 0.5 * g * t ** 2)

    # Zeichne die Kugel
    pygame.draw.circle(screen, RED, (int(x), int(y)), 10)

    # Aktualisiere das Display
    pygame.display.flip()

    # Aktualisiere die Zeit
    t += dt

    # Kontrolliere die Bildwiederholrate (25 FPS)
    clock.tick(25)

    # Beende die Simulation, wenn die Kugel den Boden erreicht
    if y > height - 50:
        running = False

# Beende Pygame
pygame.quit()
Bernd
Bernd Fischer
Django & Python Trainer

Ich helfe Entwicklern, wartbare Python- und Django-Projekte zu bauen.

Newsletter

Praxisnahe Inhalte zu Python, Django und KI. Kurz und ohne Spam.

Jetzt anmelden
Kostenloses Django-Ebook

Django für Profis: Architektur und Best Practices

Jetzt downloaden

Online- und Präsenzkurse zum Thema

Finden Sie interessante und zum Thema passende Kurse

Django Intensiv Schulung

Lernen Sie Django in nur 5 Tagen mit diesem umfassenden Intensivkurs! Vom Einstieg in die Entwicklung Ihrer ersten Webanwendung bis hin zu fortgeschrittenen Themen wie API-Entwicklung und Testing – dieser Kurs deckt alles ab. Perfekt für Entwickler, die schnell produktiv mit Django arbeiten möchten.

5 Tage Vollzeit Online

  • Nächster Termin: 18. Mai 2026
  • Preis p.P.: 1600,00 EUR (inkl. MwSt. 1904,0 EUR)

REST Api entwicklen mit Django und Chatbot Entwicklung

Buchen Sie dieses intensive 5-Tage-Seminar und lernen Sie, professionelle REST-APIs mit dem Django REST Framework zu erstellen, zu optimieren und zuverlässig zu testen. Sie entwickeln moderne APIs und erweitern diese praxisnah zu intelligenten Chatbots mit der OpenAI API. Der Fokus liegt auf produktiver Umsetzung, klaren Architekturen und direktem Nutzen für Ihre Projekte.

5 Tage Vollzeit Online

  • Nächster Termin: 18. Mai 2026
  • Preis p.P.: 1900,00 EUR (inkl. MwSt. 2261,0 EUR)

Unsicher, welcher Kurs für Sie passt?

Gerne unterstütze ich Sie bei der Auswahl oder stelle eine individuell passende Schulung für Ihre Anforderungen zusammen.

Beratung anfordern