lehrkraefte:blc:informatik:glf22:turtle

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf22:turtle [2023/01/12 11:52]
Ivo Blöchliger [Pythagorasbaum]
lehrkraefte:blc:informatik:glf22:turtle [2023/01/27 09:22] (current)
Ivo Blöchliger [Pythagorasbaum]
Line 63: Line 63:
  
 <hidden Lösungsvorschläge> <hidden Lösungsvorschläge>
-Das kriegen Sie jetzt aber selber hin!+<code python 12-eck.py> 
 +from kroete import Kroete 
 + 
 +t = Kroete() 
 + 
 +for i in range(12): 
 +    t.forward() 
 +    t.left(30) 
 + 
 +</code> 
 +<code python 5zack.py> 
 +from kroete import Kroete 
 + 
 +t = Kroete() 
 + 
 +for i in range(5): 
 +    t.forward(200) 
 +    t.left(144) 
 +</code> 
 +<code python n-eck.py> 
 +from kroete import Kroete 
 + 
 +n=7 
 + 
 +t = Kroete() 
 +for i in range(n): 
 +    t.forward() 
 +    t.left(360/n) 
 + 
 +</code> 
 +<code python n-zack.py> 
 +from kroete import Kroete 
 + 
 +n=11              # Anzahl Zacken 
 +m=4   # Wie viele Zacken vorwärts (darf kein Teiler von n sein!
 + 
 +t = Kroete() 
 +for i in range(n): 
 +    t.forward(200) 
 +    t.left(m*360/n) 
 +</code>
 </hidden> </hidden>
 </WRAP> </WRAP>
Line 135: Line 175:
  
 <WRAP todo> <WRAP todo>
-  * Schreiben und testen Sie eine Funktion ''koch1'', die eine Koch-Kurve der Stufe 1 zeichnet. Als Argument nimmt die Funktion eine Turtle entgegen. +  * Schreiben und testen Sie eine Funktion ''koch0'', die eine Koch-Kurve der Stufe 0 zeichnet, also einfach eine Gerade. Als Argumente nimmt die Funktion eine Turtle und die Gesamtlänge entgegen. 
-  * Schreiben Sie dann eine Funktion ''koch2'', die eine Koch-Kurve der Stufe 2 zeichnet (und die natürlich die Funktion ''koch1'' benutzt).+  * Schreiben und testen Sie eine Funktion ''koch1'', die eine Koch-Kurve der Stufe 1 zeichnet und dabei die Funktion ''koch0'' aufruft. Als Argument nimmt die Funktion eine Turtle und die die Gesamtlänge entgegen. Die Länge einer ''koch0''-«Kurve» muss dann aus der Gesamtlänge berechnet werden
 +  * Schreiben Sie dann eine Funktion ''koch2'', die eine Koch-Kurve der Stufe 2 zeichnet (und die natürlich die Funktion ''koch1'' benutzt). Ebenfalls gleiche Argumente. 
 +  * Wie unterscheiden sich die Funktionen ''koch2'' und ''koch1''?
   * Anstatt jetzt noch eine Funktion ''koch3'' zu schreiben, schreiben Sie eine Funktion ''koch'', die einen zusätzlichen Parameter ''stufe'' entgegen nimmt. Ist die ''stufe'' Null, wird ein einzelner Strich gezeichnet und dann die Funktion mit ''return'' beendet. Ansonsten wird 4 mal die Funktion ''koch'' mit ''stufe-1'' aufgerufen und dazwischen entsprechend gedreht.   * Anstatt jetzt noch eine Funktion ''koch3'' zu schreiben, schreiben Sie eine Funktion ''koch'', die einen zusätzlichen Parameter ''stufe'' entgegen nimmt. Ist die ''stufe'' Null, wird ein einzelner Strich gezeichnet und dann die Funktion mit ''return'' beendet. Ansonsten wird 4 mal die Funktion ''koch'' mit ''stufe-1'' aufgerufen und dazwischen entsprechend gedreht.
-  * Wie lange wird die ganze Kurve auf Stufe 0, 1, 2, 3 und allgemein $n$? Passen Sie damit die Schrittlänge an, damit die Kurve schön auf den Bildschirm passt. +  * Zusatzaufgabe: Zeichnen Sie 3 Koch-Kurven auf einem gleichseitigen Dreieck, dass damit die «Kochschneeflocke» entsteht.
-  * Zeichnen Sie dann 3 Kurven auf einem gleichseitigen Dreieck, dass damit die «Kochschneeflocke» entsteht.+
  
 {{:lehrkraefte:blc:informatik:glf22:pasted:20230112-103525.png}} {{:lehrkraefte:blc:informatik:glf22:pasted:20230112-103525.png}}
Line 157: Line 198:
 Die Funktion nimmt folgende Parameter entgegen: Die Funktion nimmt folgende Parameter entgegen:
   * Eine Turtle ''t''. Diese legt die Richtung und die Länge vom Quadrat als ''t.r'' fest.   * Eine Turtle ''t''. Diese legt die Richtung und die Länge vom Quadrat als ''t.r'' fest.
-  * Einen Winkel ''w'', der dem Winkel des rechtwinkligen Dreiecks entspricht. +  * Einen Winkel ''w'', der dem «linken» Winkel des rechtwinkligen Dreiecks entspricht. 
-  * Die Turtle startet bei «Start» und muss am Ende bei «Ende» sein. Die Schrittlänge ''t.r'' soll unverändert sein.+  * Die Turtle startet bei «Start» und muss am Ende bei «Ende» sein. Die Schrittlänge ''t.r'' soll am Schluss unverändert sein
 +  * Sie können dazu auch die Turtle-Methoden ''save'' und ''restore'' verwenden, um sich die Position und Zustand der Turtle zu merken.
  
-Hinweis: Sie können die Kathetenlängen mit Trigonometrischen Funktionen berechnen. +Hinweis: Sie können die Kathetenlängen mit trigonometrischen Funktionen aus ''w'' und ''t.r'' berechnen. 
  
 </WRAP> </WRAP>
Line 167: Line 209:
 Erweitern Sie Ihre Funktion so, dass ein zusätzlicher Parameter ''stufe'' entgegengenommen wird. Erweitern Sie Ihre Funktion so, dass ein zusätzlicher Parameter ''stufe'' entgegengenommen wird.
   * Ist die ''stufe'' Null, macht die Funktion immer noch das genau gleiche.   * Ist die ''stufe'' Null, macht die Funktion immer noch das genau gleiche.
-  * Sonst wird anstelle des Zeichnens Katheten die Funktion selbst mit ''stufe-1'' aufgerufen, der Rest bleibt sich geich.+  * Sonst wird anstelle des Zeichnens der Katheten die Funktion selbst mit ''stufe-1'' aufgerufen, der Rest bleibt sich geich. 
 +  * Probieren Sie verschiedene Winkel aus. 
 +  * Anstatt die ''stufe'' als Abbruchkriterium zu verwenden, verwenden Sie ''t.r'', d.h. sobald die zu zeichnende Strecke z.B. kleiner als 3 ist, wird abgebrochen. So werden alle Äste bis zu einer sinnvollen Tiefe gezeichnet. 
 +  * Man erhält einen interessanten Baum, wenn man statt einen konstanten Winkel ''w'' zu verwenden, zwischen ''w'' und ''90-w'' abwechselt, bzw. den je nach Stufe anpasst (z.B. als Schwingung ;-))
 </WRAP> </WRAP>
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from kroete import Kroete
 +from math import cos,sin,pi
 +
 +
 +
 +def baum(t, winkel, stufe):
 +    t.save()
 +    for i in range(4):
 +        t.forward()
 +        t.left(90)
 +    t.left(90)
 +    t.move()
 +    a = cos(winkel/180*pi)*t.r
 +    b = sin(winkel/180*pi)*t.r
 +    t.right(90-winkel)
 +    t.r = a
 +    if stufe==0 or (stufe<0 and t.r<3):
 +        t.forward()
 +    else:
 +        baum(t, winkel, stufe-1)
 +    t.right(90)
 +    t.r = b
 +    if stufe==0 or (stufe<0 and t.r<3):
 +        t.forward()
 +    else:
 +        baum(t, winkel, stufe-1)
 +    t.restore()
 +    t.move()
 +
 +
 +
 +t = Kroete()
 +t.y = -200
 +t.x = 50
 +t.r = 110
 +baum(t, 30, -1)
 +</code>
 +</hidden>
  • lehrkraefte/blc/informatik/glf22/turtle.1673520748.txt.gz
  • Last modified: 2023/01/12 11:52
  • by Ivo Blöchliger