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-21 21:22] – [Schneeflocke] sca | gf_informatik:christmas_art [2023-12-22 08:53] (aktuell) – [Schneeflocke] sca | ||
|---|---|---|---|
| Zeile 18: | Zeile 18: | ||
| <code python> | <code python> | ||
| from gturtle import * | from gturtle import * | ||
| + | |||
| + | Options.setPlaygroundSize(800, | ||
| + | |||
| t = Turtle() # Turtle erstellen | t = Turtle() # Turtle erstellen | ||
| Zeile 56: | Zeile 59: | ||
| ... # hier dein Code vom letzten Punkt | ... # hier dein Code vom letzten Punkt | ||
| </ | </ | ||
| - | </ | + | </ |
| 1. Nun kannst du ganz **viele Schneeflocken** zeichnen: < | 1. Nun kannst du ganz **viele Schneeflocken** zeichnen: < | ||
| <code python> | <code python> | ||
| Zeile 69: | Zeile 72: | ||
| x = random.randint(-400, | x = random.randint(-400, | ||
| ... | ... | ||
| - | </ | + | </ |
| 1. **Optional: | 1. **Optional: | ||
| - | 1. Gib den Schneeflocken verschiedene Farben. | + | 1. Gib den Schneeflocken |
| - | 1. Generiere die Positionen der Schneeflocken **zufällig** und stelle sicher, dass es **keine Überlappungen** gibt. | + | 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, | ||
| + | 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, | ||
| + | |||
| + | # | ||
| + | |||
| + | </ | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | </ | ||