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:21] – 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, | ||
+ | |||
+ | # | ||
+ | |||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | </ |