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:14] – [Christmas Art] sca | gf_informatik:christmas_art [2023-12-22 08:53] (aktuell) – [Schneeflocke] sca | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
* Dabei die Grundlagen der Programmierung auffrischen. | * Dabei die Grundlagen der Programmierung auffrischen. | ||
- | (*) 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> |