Skip to main content


Zutaten: Zucker, Kakaomasse (50%), Milchzucker, Weizenmehl, Vollmilchpulver, Magermilchpulver, Butterreinfett, Sahnepulver, Butter (1,4%)
Kann Spuren von Analysis und Geometrie enthalten.

IV_17_n-eck-titel

Wie man mit TigerJython Drei-, Pi- und Millionen-Ecke zeichnet

Charly besucht Max am Wochenende in Lemgo. Sie sind Mountainbike gefahren, Charly hat bei Max' Handball zugeschaut und nun wollen sie am Abend ein Bier trinken. Als er Max den Handball zuwerfen will, fliegt der Handball in einem merkwürdigen Zickzack.

Max Hey, was war das?

Charly Hey, Dein Ball ist verhext! Der fliegt nicht normal.

Max Der ist nicht verhext! Bei Dir stimmt was nicht, kannst Du den nicht in einem kleinen Bogen mir zuwerfen, ganz leicht? Wir lernen das im Training in allen Lebenslagen, auf dem Bauch, beim Sprung, rückwärts laufend, durch die Beine usw.

Charly Ich glaub, ich habe zu viel über meine Python-Programme und Vielecke nachgedacht, ich werde einfach nicht glücklich damit.

Funktionen in TigerJython

Max Was ist los?

Charly Mein Lehrbuch bietet ein Programm an, mit dem Girls and Boys auf “didaktisch wunderbare” Weise Funktionen kennenlernen. Dort heißt das zwar nicht Funktion, sondern Befehl, und eine Funktion, die in dem Buch Befehl genannt wird, besteht natürlich aus mehreren Befehlen …

Max Hahaha, hört sich wie eine rekursive Funktion an und wie beim Zauberlehrling!

Charly Okay, haha, damit komme ich schon klar. Ich hasse es, die Dinge zu verniedlichen und dann am Elternabend den Eltern-IT-Spezialisten die „Didaktik“ dahinter zu erklären. Kannst Du Dir vorstellen, so eine junge Mutter, die mit 3 Notebooks unterm Arm ankommt, von Befehlen in Befehlen zu überzeugen?

Max Wie sieht sie denn aus?

Charly Verdammt gut!

Max Hey!

Charly Na, okay, das ist nicht wirklich das Problem …

Max Was ist denn Dein Problem?

Die Vieleck-Funktion für die Turtle-Grafik

Charly Ich soll eine Funktion mit Parametern erklären, die ein n-Eck zeichnet. Das n und die Seitenlänge sollen variabel bleiben.

Max Ist das zu schwer? Mal doch mal ein Bild!

Charly Das vorgegebene Verfahren beruht auf der Idee:

iV_17_n-eck_03-06

Du sollst ein n-Eck im vorgegebenen Fenster zeichnen, im Nullpunkt starten und dann l Pixel nach oben gehen. Dann sollst Du Dich um den Winkel \alpha nach rechts drehen und wieder l Pixel geradeaus gehen.

Max Hm. Wie groß ist \alpha?

Charly Das siehst Du an der Zeichnung. Zunächst ist am Mittelpunkt des Kreises

\alpha\;=\;\frac{360^\circ}{n}

Max Okay.

Charly Dann siehst Du im Dreieck MBC:

\alpha\;+\;2 \beta\;=\;180^\circ

Und am Punkt B siehst Du dann, dass

\alpha\;+\;2 \beta\;=\;180^\circ

ist, dass die Turtle sich wirklich um denselben Winkel \alpha nach rechts drehen muss.

iV_17_n-eck-window_03-05
Herleitung einer Turtle-Grafik im Fenster von 800 x 600 px. Die braunen Pfeile zeigen den Weg der Turtle an, der dann gezeichnet wird.

 

Max Und weiter?

Charly Die Funktion vieleck mit den beiden Parametern anzahl_ecken – das ist unser n – und der Seitenlänge seitenlaenge soll dann dafür sorgen, dass die Turtle l Schritte geradeaus geht, sich um \alpha nach rechts dreht, und das n-mal. l ist die Seitenlänge unseres n-Ecks, also die Länge der Strecke AB.

360-Millionen-Eck

Max Verstehe. Läuft die Turtle dann wieder zum Fenster hinaus?

Charly Ja, richtig, wenn l zu groß ist, läuft sie zum Fenster hinaus, man müsste das abschätzen, aber auch für kleine l und große n läuft sie zum Fenster hinaus, hier schau mal:

Für

l\;=\;1

n= 360\; 000\; 000

kriege ich so ein „360-Millionen-Eck“:

IV_17_millionstel
Die Turtle-Grafik des 360-Millionen-Ecks. n\;=\;360\; 000\; 000,\; l\;=\;1

 

Da musste ich die halbe Nacht drauf warten, die Rechnung hat mein Notebook blockiert, ich konnte überhaupts nichts machen, hab nur gewartet!

Max Oh, Mann! Da kannst Du im Unterricht Probleme kriegen, wenn Deine Girls and Boys große Zahlen eingeben und unbedingt das Ergebnis abwarten wollen? Musst Du dann die Eltern anrufen und einen Shuttle organisieren?

Charly Haha.

Max Aber sag mal, ist das Ergebnis richtig? Sollte da nicht sowas wie ein Kreis rauskommen?

Charly Hm! Was weiß ich! Aber noch schlimmer ist, wenn einer dieser coolen Kids für n verrücktes Zeug eingibt!

Das Problem fehlender Datentypen

Max Wieso denn das?

Charly Die Herleitung klappt natürlich nur für natürliche n,\; n \ge 3. Das kleinste sinnvolle Beispiel ist das Dreieck.

IV_17_dreieck_01
Dreieck mit n\;=\;3,\; l\;=\;200

Aber in TigerJython gibt es keine Datentypen! Du kannst nicht einfach n als Integer deklarieren und als Eingabe nur Integer akzeptieren. So – wie das in anderen Programmiersprachen üblich und nützlich ist!  Diese fehlenden Datentypen werden sogar als großer Vorteil gefeiert. Du kannst anstelle von n alles Mögliche eingeben: eine negative Zahl, eine Zeichenkette, Null oder auch \pi:

n\;=\;3.1415296

Dann kriegst Du für den Winkel \alpha:

\alpha\;=\;\frac{360^\circ}{n}

\;\;=\;\frac{360^\circ}{\pi}

\;\;=\; 114.59 ^\circ

Das wird n-Mal wiederholt. In Python, was als Programmiersprache dahintersteckt, wird eine Schleife nicht \pi-mal ausgeführt, sondern für die Anzahl der Durchläufe wird intern in eine ganze Zahl generiert, in dem Fall kommt 3 raus. Das habe ich morgens um 4 nach dem missglückten 360-Millionen-Eck noch herausgefunden.

Max Oh, Charly, wie hälst Du das durch?

Charly Hm, mit Humor!

Max Super. Also, für ein Pi-Eck dreht sich die Turtle 3-mal um 114.59°, richtig? Das sind

3 \cdot 114.59^\circ\;=\;343.77^\circ

Dann kommt sie nicht wieder am Nullpunkt an!

IV_17_pi-eck_01
Pi-Eck mit n=\pi,\; l\;=\;200

Ach, Charly, so ein Pi-Eck ist doch wirklich sooo cool. So was macht bestimmt beim nächsten Elternabend großen Eindruck!

Charly Hahaha!

***

Übungsaufgaben

  1. Was passiert mit diesem Algorithmus für n\;=\;360\; 000\; 000?
  2. Schreibe das Programm dafür!
  3. Wie sieht damit ein 2-Eck aus?
  4. Wie sieht damit ein e-Eck aus?

Lösungen

  1. Dann wird der Winkel

    \alpha\;=\;\frac{360^\circ}{360\; 000\; 000}\;=\;0.000\; 001 ^\circ

    Den Radius r des Kreises kann man berechnen.

    iV_17_n-eck-radius_03-05

    Es ist

     \tan\; \frac{\alpha}{2}\;=\;\frac{\frac{l}{2}}{r}

    Und folglich

      r\;=\;\frac{\frac{l}{2}}{\tan\; \frac{\alpha}{2} }\;.

    Für

    l\;=\;1

     n\;=\;360\; 000\; 000

    ergibt das einen Radius r von

     r \;\;=\;\frac{\frac{1}{2}}{\tan\; 0.000\; 000\; 5 ^\circle}

     \; \approx 1\; 000\; 000

    Dieses 360-Millionen-Eck mit einem Umkreisradius von 106 px passt nicht in das 800 x 600 px-Fenster. Es zeigt nur die ersten und letzten Teile.

  2. IV_17_python_code_03
    Code für das n-Eck nach Hromkovič, J.; Kohn, T.: einfach Informatik – Programmieren, Klett, 2018, S. 47.
  3. IV_17_python_vieleck_2-eck_02
    Das 2-Eck. n\;=\;2,\;l\;=\;200.
  4. IV_17_vieleck_e-eck_02
    Das e-Eck. n\;=\;2.718,\;l\;=\;200.