Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:christmas_art [2023-12-19 15:47] – sca | gf_informatik:christmas_art [2023-12-22 08:53] (aktuell) – [Schneeflocke] sca | ||
|---|---|---|---|
| Zeile 7: | Zeile 7: | ||
| (*) Falls man lieber mit richtigem Python arbeiten möchte, kann man deren [[https:// | (*) Falls man lieber mit richtigem Python arbeiten möchte, kann man deren [[https:// | ||
| - | ==== Wichtige Befehle ==== | ||
| - | TigerJython: | + | {{ :gf_informatik: |
| + | |||
| + | |||
| + | ==== Theorie ==== | ||
| + | |||
| + | [[gf_informatik: | ||
| + | |||
| + | ++++Zusammenstellung wichtigste Befehle| | ||
| <code python> | <code python> | ||
| from gturtle import * | from gturtle import * | ||
| + | |||
| + | Options.setPlaygroundSize(800, | ||
| + | |||
| t = Turtle() # Turtle erstellen | t = Turtle() # Turtle erstellen | ||
| Zeile 32: | Zeile 41: | ||
| t.left(45) # nach links drehen (Winkel angeben) | t.left(45) # nach links drehen (Winkel angeben) | ||
| t.right(45) # nach rechts drehen | t.right(45) # nach rechts drehen | ||
| - | |||
| - | |||
| </ | </ | ||
| + | ++++ | ||
| ==== Schneeflocke ==== | ==== Schneeflocke ==== | ||
| - | 1. Wähle ein **Schneeflockenmuster** aus. Recherchiere im Internet, erfinde ein eigenes oder wähle eines der folgenden: {{ : | + | 1. Wähle ein **Schneeflockenmuster** aus. Recherchiere im Internet, erfinde ein eigenes oder wähle eines der folgenden: {{ : |
| 1. **Zeichne** nun eine Schneeflocke ins Zentrum des Bildschirms. Tipps: | 1. **Zeichne** nun eine Schneeflocke ins Zentrum des Bildschirms. Tipps: | ||
| 1. Beginne mit `t.home()`, damit Turtle richtig ausgerichtet ist. | 1. Beginne mit `t.home()`, damit Turtle richtig ausgerichtet ist. | ||
| 1. Verwende **Schleifen** (while oder for) anstelle von Copy-Paste. | 1. Verwende **Schleifen** (while oder for) anstelle von Copy-Paste. | ||
| 1. Verwende **Variablen** für Werte, die mehrfach benötigt werden. | 1. Verwende **Variablen** für Werte, die mehrfach benötigt werden. | ||
| + | 1. Siehe **Theorie** oben.\\ \\ | ||
| 1. Packe deinen Code vom letzten Punkt nun in eine **Funktion**. Dies erlaubt die, ganz viele Schneeflocken an verschiedenen Orten zu zeichnen:< | 1. Packe deinen Code vom letzten Punkt nun in eine **Funktion**. Dies erlaubt die, ganz viele Schneeflocken an verschiedenen Orten zu zeichnen:< | ||
| <code python> | <code python> | ||
| - | def schneeflocke(x, | + | def schneeflocke(x, |
| t.home() # damit Turtle gerade nach oben schaut | t.home() # damit Turtle gerade nach oben schaut | ||
| t.setPos(x, | t.setPos(x, | ||
| Zeile 63: | Zeile 72: | ||
| x = random.randint(-400, | x = random.randint(-400, | ||
| ... | ... | ||
| + | </ | ||
| + | 1. **Optional: | ||
| + | 1. Gib den Schneeflocken **verschiedene Farben**. | ||
| + | 1. Implementiere **verschiedene Formen**, z.B. mehrere verschiedene Schneeflocken. | ||
| + | 1. *Anspruchsvoll: | ||
| + | |||
| + | |||
| + | <nodisp 2> | ||
| + | |||
| + | ++++Code sca| | ||
| + | |||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | import random | ||
| + | |||
| + | colors = [" | ||
| + | |||
| + | WIDTH = 1200 | ||
| + | HEIGHT = 800 | ||
| + | Options.setPlaygroundSize(WIDTH, | ||
| + | t = Turtle() | ||
| + | t.setFillColor(" | ||
| + | t.fill(0,0) | ||
| + | t.setPenColor(" | ||
| + | t.setPenWidth(1) | ||
| + | t.hideTurtle() | ||
| + | |||
| + | ### dimensions | ||
| + | scale = 0.5 | ||
| + | d = int(50 * scale) | ||
| + | d1 = int(15 * scale) | ||
| + | ang1 = 45 | ||
| + | d2 = int(20 * scale) | ||
| + | d3 = int(15 * scale) | ||
| + | ang3 = 55 | ||
| + | |||
| + | def schneeflocke(x=0, | ||
| + | t.setPenColor(color) | ||
| + | for i in range(6): | ||
| + | t.home() | ||
| + | t.setPos(x, | ||
| + | t.left(60*i+30) | ||
| + | t.forward(d) | ||
| + | t.back(d1) | ||
| + | t.left(ang1) | ||
| + | t.forward(d1) | ||
| + | t.back(d1) | ||
| + | t.right(2*ang1) | ||
| + | t.forward(d1) | ||
| + | t.back(d1) | ||
| + | t.left(ang1) | ||
| + | t.back(d2) | ||
| + | | ||
| + | t.left(ang3) | ||
| + | t.forward(d3) | ||
| + | t.back(d3) | ||
| + | t.right(2*ang3) | ||
| + | t.forward(d3) | ||
| + | t.back(d3) | ||
| + | t.left(ang3) | ||
| + | |||
| + | def get_nonoverlapping_positions(n=10, | ||
| + | positions = [] | ||
| + | for i in range(n): | ||
| + | while True: | ||
| + | x = random.randint(-width// | ||
| + | y = random.randint(-height// | ||
| + | # list empty | ||
| + | if len(positions) == 0: | ||
| + | positions.append((x, | ||
| + | break | ||
| + | # check if point is far enough from other points | ||
| + | too_close = False | ||
| + | for (px,py) in positions: | ||
| + | d = ((px-x)**2 + (py-y)**2)**0.5 | ||
| + | if d < d_min: | ||
| + | too_close = True | ||
| + | break | ||
| + | if not too_close: | ||
| + | positions.append((x, | ||
| + | break | ||
| + | |||
| + | return positions | ||
| + | |||
| + | positions = get_nonoverlapping_positions(n=120, | ||
| + | |||
| + | for x,y in positions: | ||
| + | schneeflocke(x, | ||
| + | |||
| + | # | ||
| + | |||
| </ | </ | ||
| - | </WRAP> | + | |
| - | 1. **Optional: | + | ++++ |
| + | |||
| + | </nodisp> | ||