Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:python:grafik [2021/11/17 11:53] – [Beispiel-Programm] Olaf Schnürer | lehrkraefte:snr:informatik:python:grafik [2021/11/17 11:54] (current) – [Beispiel-Programm] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Grafik ====== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Schreibe ein Programm, das ein (beschriftetes) Koordinatensystem zeichnet und darin den Graph einer Funktion, etwa der Sinusfunktion oder der Fumktion $\sin(\frac 1{x})$ für positive $x$. | ||
| + | |||
| + | Dazu musst du zuerst etwas Grafik-Programmierung in Python lernen. Verwende mindestens eine der beiden folgenden Möglichkeiten (" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Lernen an Beispielen ===== | ||
| + | |||
| + | Schau dir drei Beispiel von Programmen an, die Grafik verwenden - variiere sie, spiele mit ihnen herum, schreibe selbst ein kleines Grafikprogramm: | ||
| + | * Aus der ersten Doppellektion [[lehrkraefte: | ||
| + | * Das Programm unten auf dieser Seite: Steuerung eines Quadrats mit den Cursortasten samt Vergrössern mit " | ||
| + | * Das Programm " | ||
| + | |||
| + | |||
| + | ===== Systematischeres Lernen ===== | ||
| + | |||
| + | Lerne aus [[https:// | ||
| + | |||
| + | * Wie öffnet man ein Grafikfenster? | ||
| + | * Wie zeichnet man Punkte, Kreise, Ellipsen, Rechtecke? | ||
| + | * Wie liegt das Koordinatensystem? | ||
| + | * etc. | ||
| + | |||
| + | |||
| + | ===== Beispiel-Programme ===== | ||
| + | |||
| + | |||
| + | <WRAP round todo> | ||
| + | Lerne aus dem folgenden Code etwas Grafik und die Verarbeitung von Tastatureingabe (Cursor-Tasten, | ||
| + | [[https:// | ||
| + | |||
| + | Bisher kann das Quadrat mit den Cursor-Tasten aus dem Fenster herausbewegt werden. Verändere das Programm so, dass dies nicht mehr möglich ist! Bestenfalls schreibst du das Programm so um, dass kein Teil des Quadrats das Fenster verlassen kann - auch nicht beim Vergrössern, | ||
| + | |||
| + | <code python> | ||
| + | from gpanel import * | ||
| + | |||
| + | Taste_links = 37 | ||
| + | Taste_rechts = 39 | ||
| + | Taste_hoch = 38 | ||
| + | Taste_runter = 40 | ||
| + | Taste_p = 80 | ||
| + | Taste_m = 77 | ||
| + | Taste_esc = 27 | ||
| + | |||
| + | def zeichne_quadrat(): | ||
| + | setColor(" | ||
| + | fillRectangle(x - laenge, y - laenge, x + laenge, y + laenge) | ||
| + | setColor(" | ||
| + | rectangle(x - laenge, y - laenge, x + laenge, y + laenge) | ||
| + | |||
| + | makeGPanel(Size(1200, | ||
| + | window(0, 60, 0, 20) | ||
| + | # Die beiden obigen Befehle machen das folgende: | ||
| + | # makeGPanel(Size(1200, | ||
| + | # window(0, 60, 0, 20) legt das Koordinatensystem in diesem Fenster fest: Die x-Koordinate geht von 0 bis 60, die y-Koordinate von 0 bis 20 | ||
| + | # | ||
| + | # Es gibt auch den Befehl | ||
| + | # makeGPanel(0, | ||
| + | # Ich finde ihn aber etwas seltsam: Er erzeugt stets ein quadratisches Fenster derselben Grösse und in meinem Beispiel geht darin die | ||
| + | # x-Koordinate von 0 bis 200 und die | ||
| + | # y-Koordinate von 0 bis 400. | ||
| + | |||
| + | text(" | ||
| + | x = 30 | ||
| + | y = 10 | ||
| + | schrittweite = 0.2 | ||
| + | laenge = 1 | ||
| + | |||
| + | zeichne_quadrat() | ||
| + | aktiv = True | ||
| + | while aktiv: | ||
| + | taste = getKeyCodeWait() | ||
| + | if taste == Taste_links: | ||
| + | x = x - schrittweite | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_rechts: | ||
| + | x = x + schrittweite | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_hoch: | ||
| + | y = y + schrittweite | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_runter: | ||
| + | y = y - schrittweite | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_p: | ||
| + | if laenge < 3: | ||
| + | laenge = laenge + 0.2 | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_m: | ||
| + | if laenge > 0.4: | ||
| + | laenge = laenge - 0.2 | ||
| + | zeichne_quadrat() | ||
| + | elif taste == Taste_esc: | ||
| + | aktiv = False | ||
| + | dispose() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Und noch ein Programm zum Lernen: | ||
| + | <code python> | ||
| + | from gpanel import * | ||
| + | import time | ||
| + | |||
| + | mx = 0 | ||
| + | my = 0 | ||
| + | |||
| + | KEY_ESC = 27 | ||
| + | KEY_SPACE = 32 | ||
| + | |||
| + | def onMousePressed(x, | ||
| + | move(x, y) | ||
| + | if isRightMouseButton(): | ||
| + | print(" | ||
| + | setColor(" | ||
| + | fillCircle(3) | ||
| + | if isLeftMouseButton(): | ||
| + | setColor(" | ||
| + | fillCircle(3) | ||
| + | |||
| + | def onMouseMoved(x, | ||
| + | global mx, my | ||
| + | setColor(" | ||
| + | fillCircle(x, | ||
| + | setColor(" | ||
| + | circle(x, | ||
| + | |||
| + | setColor(" | ||
| + | point(x, y + 10) | ||
| + | |||
| + | circle(y, | ||
| + | setColor(" | ||
| + | circle(-x, | ||
| + | setColor(" | ||
| + | circle(-y, | ||
| + | mx = x | ||
| + | my = y | ||
| + | |||
| + | def onMouseDragged(x, | ||
| + | setColor(" | ||
| + | move(x, y) | ||
| + | fillEllipse(0.5, | ||
| + | |||
| + | |||
| + | makeGPanel(Size(1200, | ||
| + | mouseMoved = onMouseMoved, | ||
| + | mouseDragged = onMouseDragged) | ||
| + | window(-60, 60, -40, 40) | ||
| + | |||
| + | title(" | ||
| + | |||
| + | key = 0 | ||
| + | |||
| + | |||
| + | line(-60, 0, 60, 0) | ||
| + | line(0, -40, 0, 40) | ||
| + | |||
| + | while key != KEY_ESC: | ||
| + | startTime = time.clock() | ||
| + | |||
| + | if kbhit(): | ||
| + | key = getKeyCode() | ||
| + | if key == KEY_SPACE: | ||
| + | clear() | ||
| + | else: | ||
| + | print(key) | ||
| + | text(mx, my, "Hier bin ich, deine Maus!" | ||
| + | print(mx, my) | ||
| + | while (time.clock() - startTime) | ||
| + | delay(1) | ||
| + | dispose() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | to be written | ||
| + | * normal graphics | ||
| + | * turtle graphics | ||
| + | * (beides?) mit Rekusion kombiniert (Sierpinski, | ||
| + | * | ||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||