image image


Spaß mit Python und der Turtle: Hexagonaler Random Walk

Der bei Microsoft forschende Psychologe und Informatiker Dan Goldstein berichtet in seinem Blog, wie er mit seiner neunjährigen Tochter in einem Bagel-Shop warten mußte. Um sich die Langeweile zu verkürzen, kramte er ein hexagonal-kariertes Blatt Papier und einen Würfel hervor (Psychologen bei Microsoft haben immer ein hexagonal-karierten Notizblock und einen Würfel dabei). Und dann entschied er, daß, wenn eine Eins gewürfelt wurde, die Tochter auf dem Papier einen Strich nach oben (nach Norden) malen durfte, bei einer Zwei ging es nach Nordost, bei einer Drei nach Südost und so weiter in alle sechs Richtungen, die ein Hexagon erlaubt. Heraus kam ein Random Walk in sechs Richtungen.

image

Als ich dies las, dachte ich, daß dies doch ein schönes Projekt für Pythons Turtle-Modul sei. Zuerst stellte ich mir die Frage, wie man denn der Schildkröte beibringt, ein Hexagon zu zeichnen. Ein Blick in die Wikipedia half mir weiter, denn dort konnte ich entnehmen, daß die Schildkröte an jedem der sechs Endpunkt einen Winkel von 60° einschlagen mußte, entweder konsequent nach rechts oder konsequent nach links. Die sechs Winkel für die sechs möglichen Richtungen sind also 0°, 60°, 120°, 180°, 240° und 300°. Brute Force zeichnet sich ein Hexagon also so:

import turtle as t

wn = t.Screen()
wn.colormode(255)
wn.bgcolor(43, 62, 80)
wn.setup(width = 600, height = 600)
wn.title("Ein Hexagon mit der Schildkröte")

hexi = t.Turtle()
hexi.pensize(2)
hexi.pencolor(253, 141, 60)

hexi.penup()
hexi.goto(-62, -87)  # Hexagon im Fenster »einmitten«
hexi.pendown()

hexi.seth(0)
hexi.fd(100)
hexi.seth(60)
hexi.fd(100)
hexi.seth(120)
hexi.fd(100)
hexi.seth(180)
hexi.fd(100)
hexi.seth(240)
hexi.fd(100)
hexi.seth(300)
hexi.fd(100)

wn.mainloop()

Natürlich geht das auch viel kürzer in einer Schleife, aber da ich für den hexagonalen Random Walk sowieso die einzelnen Winkel bräuchte, habe ich es erst einmal so gelassen.

Ein eleganterer Weg könnte so aussehen: Hier habe ich in einer Schleife zwei Hexagons zeichnen lassen, eines nur mit Rechts- und ein zweites nur mit Linkswinkeln:

import turtle as t

wn = t.Screen()
wn.colormode(255)
wn.bgcolor(43, 62, 80)
wn.setup(width = 600, height = 600)
wn.title("Hexagon-Schleife")

hexi = t.Turtle()
hexi.pensize(2)
hexi.pencolor(253, 141, 60)
hexa = t.Turtle()
hexa.pensize(2)
hexa.pencolor(240, 59, 32)

hexi.penup()
hexi.goto(75, 0)
hexi.pendown()

hexa.penup()
hexa.goto(-25, 0)
hexa.pendown()

for i in range(6):
    hexi.rt(60)
    hexi.fd(100)
    hexa.lt(60)
    hexa.fd(100)

wn.mainloop()

Das Ergebnis sieht dann aus wie dieser Screenshot:

image

Nach diesen Vorarbeiten war das Programm zum hexagonalen Zufallsmarsch ein Kinderspiel. Zumal das Pythonmodul random mit der Methode randint() die Simulation eines sechseitigen Würfels extrem einfach macht. Dazu habe ich mir noch von dieser Seite eine schöne Farbpalette aus sechs Farben herausgesucht, die von hellorange bis dunkelrot reicht und die zeigt, wie weit die Schildkröte auf ihrer Reise schon gekommen ist. Hier das komplette Programm:

import turtle as t
import random as r

wn = t.Screen()
wn.colormode(255)
wn.bgcolor(43, 62, 80)
wn.setup(width = 600, height = 600)
wn.title("Hexagonaler Random Walk")

hexi = t.Turtle()
hexi.speed(0)
hexi.pensize(2)


for step in range(500):
    if step < 100:
        hexi.pencolor(255, 255, 178)
    elif step < 200:
        hexi.pencolor(254, 204, 92)
    elif step < 300:
        hexi.pencolor(253, 141, 60)
    elif step < 400:
        hexi.pencolor(240, 59, 32)
    else:
        hexi.pencolor(189, 0, 38)
    roll = r.randint(1, 6)
    if roll == 1:
        hexi.seth(0)
    elif roll == 2:
        hexi.seth(60)
    elif roll == 3:
        hexi.seth(120)
    elif roll == 4:
        hexi.seth(180)
    elif roll == 5:
        hexi.seth(240)
    elif roll == 6:
        hexi.seth(300)
    else:
        print("Es ist etwas faul im Staate Dänemark!")
    hexi.fd(10)

print("I did it, Babe!")

wn.mainloop()

Natürlich kann es passieren, daß die Turtle auf ihrem Zufallsweg das Bildschirmfenster auch einmal verläßt, aber das Turtle-Modul ist da stabil. Es läßt die Schildkröte einfach ziehen und wenn sie wiederkommen will, darf sie auch wiederkommen.

Ich habe die Iteration testweise auch mit 1.000 Schritten durchgeführt, in den meisten Fällen verläßt die Schildkröte das Bildschirmfenster nicht.

Literatur

Random-Walk-Modelle finden einige interessanten Anwendungen von der Biologie bis zur Finanzwirtschaft. Wer sich da hineinlesen will, findet hier ein paar interessante Beiträge:

Und auch im schon einmal verlinkten Original-Blog-Post, der mich zu diesem Beitrag inspirierte, hat Dan Goldstein ein paar überraschende Überlegungen zum Zufallsspaziergang der Schildkröte angestellt.


(Kommentieren) 

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.

Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.

Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.


Werbung


Werbung


image  image  image
image  image  image


image