Ball mit Schwerkraft (Turtle)

Ball mit Schwerkraft (Turtle)

Mit dem Python-Modul „Turtle“ lassen sich einfach Grafiken und Animationen erstellen. Zusammen mit etwas Physik kann ein fallender Ball simuliert werden. Das Beispiel enthält einen Ball der gedämpft am Boden abprallt.

import turtle

border = turtle.Turtle()
ball = turtle.Turtle()

Zunächst wird das Modul „turtle“ importiert. Sollte dies nicht funktionieren, muss es zunächst mit pip -install turtle installiert werden.

Anschliessend wird ein Turtle-Objekt für unsere Umrandung „border“ und den Ball „ball“ erzeugt.

border.shape(’square‘)
border.resizemode(‚user‘)
border.shapesize(0.1,0.1)
border.up()
border.setpos(300,300)
border.down()
border.setpos(300,-300)
border.setpos(-300,-300)
border.setpos(-300,300)
border.setpos(300,300)
border.up()

ball.up()
ball.shape(‚circle‘)
ball.resizemode(‚user‘)
ball.shapesize(1,1)
ball.setpos(0,0)

Nun kann die Umrandung erzeugt werden. Hierzu wird zuerst der Stift angehoben. Dies kann durch den Befehl „up()“ erreicht werden. Sonst zeichnet Turtle auch die Verschiebung zur Startposition nach. Das Rechteck der Umrandung soll die Länge 600×600 haben. Wenn das Zentrum auf der Position 0,0 zu finden ist, zeichnet man die Umrandung über den Befehl „setpos(x,y)“ einmal ringsherum. Zusätzlich wird der Ball auf die Position 0,0 gesetzt und das Nachzeichnen („up()“) deaktiviert.

v = 0
a = -0.05
daempfung = 0.2

Jetzt können die Startbedingungen gesetzt werden. Wir möchten die Position des Balls verschieben, also eine Strecke angeben. Die Gleichung hierzu lautet s = v/t. Zur Umsetzung in Turtle kann man t zu 1 setzen, da die Bewegung pro einem Frame benötigt wird. Damit ist s = v. Das Weg-Zeit-Gesetz kann damit mit s = v zu v = v + a umgeformt werden. (https://de.wikipedia.org/wiki/Gleichmäßig_beschleunigte_Bewegung)

Die Anfangsgeschwindigkeit wird zu v = 0 gesetzt. Für die Beschleunigung a ist in der Turtle-Umgebung der Wert -0.05 eine gute Wahl. Sie ist negativ um die Erdbeschleunigung zu simulieren. Die Dämpfung tritt beim Abprallen des Balls am Boden in Erscheinung. Hier wird zunächst der Wert 0.2 gewählt.

while True:
v = v + a
x,y = ball.position()

if(y<=-290): v = (1-daempfung)*-v ball.setpos(x,y+v)

Nun kann mit while True eine Animation über jeden Frame bis zum Abbruch erstellt werden. Die Verschiebung (Strecke) wird mit der zuvor eingeführten Gleichung v = v + a bestimmt. Für jedes Frame muss zunächst die derzeitige Position des Balls mit „position()“ bestimmt werden. Um ein Abprallen zu realisieren, wird die Position des Balls abgefragt. Erreicht der Ball die Position -290 wird die Geschwindigkeit umgekehrt und gleichzeitig gedämpft um ein realistischeres Verhalten zu erreichen. Bei einer Dämpfung von 0 hüpft der Ball unendlich lange. Zuletzt wird der Ball mit „setpos(x,y)“ verschoben. In diesem einfachen Beispiel gibt es nur eine y-Komponente. Da, wie zuvor erklärt, s = v angenommen werden kann, ist v direkt als Strecke einsetzbar.

Hier nochmals der gesamte Code am Stück:

import turtle

border = turtle.Turtle()
ball = turtle.Turtle()

border.shape(’square‘)
border.resizemode(‚user‘)
border.shapesize(0.1,0.1)
border.up()
border.setpos(300,300)
border.down()
border.setpos(300,-300)
border.setpos(-300,-300)
border.setpos(-300,300)
border.setpos(300,300)
border.up()

ball.up()
ball.shape(‚circle‘)
ball.resizemode(‚user‘)
ball.shapesize(1,1)
ball.setpos(0,0)

v = 0
a = -0.05
daempfung = 0.2

while True:
v = v + a
x,y = ball.position()

if(y<=-290): v = (1-daempfung)*-v ball.setpos(x,y+v)

Mit den Parametern a und daempfung kann rumgespielt werden.

Ergebnis

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.