lehrkraefte:snr:mathematik:klasse-2:2022-23:python-koordinatengrafik

Koordinatengrafik mit Python

Speichere die folgende Grafik-Bibliothek unter dem Namen kantigrafik.py in deinem Python-Verzeichnis ab (Anklicken mit rechter Maustaste).

Neue Version vom 15.12.2022:

kantigrafik.py

Wir verwenden diese Bibliothek im Folgenden als black box, so wie wir etwa die Turtle-Bibliothek als black box verwendet haben.

Ich habe diese (im wesentlichen auf pygame basierende) Bibliothek geschrieben, da ich im Internet bisher keine “einfache, schulgeeignete” Grafik-Bibliothek gefunden habe.

Versuche anhand des folgenden Programms die wesentlichen Funktionen der Bibliothek kantigrafik zu verstehen. Du musst dieses Programm im selben Verzeichnis abspeichern wie die Datei kantigrafik.

demo-kantigrafik.py

Bemerkung/Lösung

Bemerkung/Lösung

Am Ende dieser Seite befindet sich eine Dokumentation der Bibliothek kantigrafik.

Mögliche Hilfen, falls das Programm nicht läuft:

Mögliche Hilfen, falls das Programm nicht läuft:

  • pygame installieren! In der Kommandozeile (cmd): pip install pygame + Enter
  • Manchmal sind mehrere Versionen von Python installiert. In VS-Code kann man per “Ctrl+Shift+p”, “Python: Select Interpreter” die gewünschte Version auswählen (Empfehlung: Version mit “global”).
  • ???
  • beim Nachbarn mitprogrammieren
rechtwinkliges-dreieck-mit-umkreis.py
from kantigrafik import *
zeichenfenster(-4, -4, 8, 6, 100, "Rechtwinkliges Dreieck mit Umkreis")
a = 4
b = 3
 
# Hier deinen Code ergänzen!
 
zeige()
warte_auf_klick()

Ergänze das obige Python-Programm so, dass ein rechtwinkliges Dreieck gezeichnet wird, dessen Katheten parallel zu den Koordinatenachsen sind und Länge a und b haben. Ändert man die Werte der Variablen a und b, so muss sich die Zeichnung entsprechend ändern.

Eine Skizze mag helfen.

Hinweis:

Hinweis:

Nimm als Eckpunkte des Dreiecks den Ursprung $(0,0)$ und den Punkt $(a,0)$ und als dritten Punkt … (bitte selbst überlegen, etwa per Skizze).


Bonusaufgabe: Zeichne zusätzlich den Umkreis dieses rechtwinkligen Dreiecks.

Hinweis

Hinweis

Denke an einen griechischen Mathematiker, dessen Namen mit dem Buchstaben “T” beginnt.

Die Koordinaten des Mittelpunkts des Umkreises sind dann relativ einfach zu berechnen.

Hinweis zum Radius des Umkreises

Hinweis zum Radius des Umkreises

Pythagoras!

Je nach Zeichnung mag Koordinatengrafik oder Turtlegrafik besser geeignet sein.

Die obige Zeichnung (rechtwinkliges Dreieck mit Umkreis) ist meinem Geschmack nach deutlich leichter mit Koordinatengrafik als mit Turtle-Grafik zu zeichnen - wer eine kleine Herausforderung benötigt, zeichne Dreieck samt Umkreis mit der Turtle!

Hinweis

Hinweis

Für das Dreieck: home() oder etwas Trigonometrie (Tangens = Gegenkathete durch Ankathete) samt Pythagoras.

Für den Umkreis: Finde den richtigen Startwinkel! (Der Radius ist hoffentlich mittlerweile klar.)

Zeichne mit Koordinatengrafik die folgende Figur (fünf konzentrische Fünfecke) bzw. allgemeiner einige konzentrische $n$-Ecke.

Hinweis: Zeichne zuerst ein Fünfeck, dessen Umkreis den Radius eins hat.

(Lösung vermutlich gemeinsam. Benötigt Trigonometrie und die math-Bibliothek. Achtung: Grad- vs. Bogenmass.)


Mögliche Lösung

Mögliche Lösung

konzentrische-n-ecke.py
from kantigrafik import *
from math import *
 
n = 5
 
zeichenfenster(-6, -5, 6, 5, 80, "Zeichenfenster")
 
farbe(GRAU)
raster()
farbe(WEISS)
x_achse()
y_achse()
 
farbe(ROT)
alpha = 360 / n
alpha_im_bogenmass = alpha / 180 * pi
for radius in range(2, 6):
    for i in range(n):
        gefuellter_kreis(radius * cos(i * alpha_im_bogenmass), radius * sin(i * alpha_im_bogenmass), 0.1)
        linie(radius * cos(i * alpha_im_bogenmass), radius * sin(i * alpha_im_bogenmass),
            radius * cos((i+1) * alpha_im_bogenmass), radius * sin((i+1) * alpha_im_bogenmass))
zeige()
speichere("bildchen.jpeg")
warte_auf_klick()

Bekanntlich kann man leicht ein einzelnes $n$-Eck mit Turtle-Grafik zeichnen (aber schon die Berechnung des Umkreisradius ist nicht ganz offensichtlich. Wer noch nicht von den Vorteilen von Koordinatengrafik überzeugt ist, zeichne einmal einige konzentrische $n$-Ecke mit Turtlegrafik.

(mit 2rG gemacht, mit 2aLIM noch nicht)

Zeichne die Graphen von Sinus, Cosinus und Tangens in unterschiedlichen Farben mit Koordinatengrafik. Du darfst natürlich auch den Graphen einer beliebigen anderen Funktion deiner Wahl zeichnen.

Hier ist ein mögliches Programm-Gerüst

Hier ist ein mögliches Programm-Gerüst

graphen-zeichnen.py
from kantigrafik import *
# Lädt unter anderem die trigonometrischen Funktionen
# sin(...), cos(...), tan(...), aber auch die Kreiszahl pi. 
from math import *
 
# minimale x-Koordinate
MINX = -10      
# maximale x-Koordinate
MAXX = 10
 
# minimale y-Koordinate
MINY = -6
# maximale y-Koordinate
MAXY = 6
 
# Länge einer Einheit im Koordinatensystem in Pixeln
PIXEL_PRO_EINHEIT = 80
 
zeichenfenster(MINX, MINY, MAXX, MAXY, PIXEL_PRO_EINHEIT, "Graphen der trigonometrischen Funktionen Cosinus (grün), Sinus (rot), Tangens (gelb)")
 
# ... und hier darfst du deinen Code ergänzen.
 
zeige()
speichere("graphen.jpeg")  
warte_auf_klick()

Optional: Gib neben der üblichen Bogenmass-Skala wie im Bild auch die Grad-Skala an.

Die wichtigsten Befehle der Bibliothek kantigrafik an Beispielen erläutert:

  • zeichenfenster(-3, -2, 8, 5, 100): Öffnet ein Zeichenfenster mit einem (unsichtbaren Koordinatensystem), dessen $x$-Koordinaten von -3 bis 8 gehen und dessen $y$-Koordinaten von -2 bis 5 gehen. Der Punkt $(-3,-2)$ ist also der Punkt ganz links unten und der Punkt $(8,5)$ ist der Punkt ganz rechts oben. Die Zahl 100 legt fest, dass eine Einheit des Koordinatensystems auf dem Bildschirm 100 Pixel lang sein soll.
  • linie(3, 7, 1, -2): Zeichnet eine Linie vom Punkt $(3,7)$ zum Punkt $(1, -2)$.
  • breite_linie(3, 7, 1, -2, 0.2): Zeichnet eine Linie der Breite 0.2 vom Punkt $(3,7)$ zum Punkt $(1, -2)$.
  • kreis(5, 2, 7): Zeichnet einen Kreis mit Mittelpunkt $(5,2)$ und Radius $7$.
  • gefuellter_kreis(5, 2, 0.1): Zeichnet einen ausgefüllten Kreis mit Mittelpunkt $(5,2)$ und Radius $0.1$, also einen dicken Punkt.
  • punkt(3, -2): Zeichnet einen Punkt an der Stelle $(3, -2)$.
  • raster(): Zeichnet das “Koordinatenraster” ein.
  • x_achse(): Zeichnet die $x$-Achse ein.
  • y_achse(): Zeichnet die $y$-Achse ein.
  • schreibe(3, -2, “Kantigrafik-Demo”, 0.5): Schreibt den angegebenen Text in der Grösse 0.5 (in Einheiten) mit “linker unterer Ecke” am Punkt (3, -2).
  • farbe(ROT): Setzt die Farbe auf rot. Andere vordefinierte Farben sind GRUEN, BLAU, GELB, MAGENTA, CYAN, WEISS, SCHWARZ, GRAU. Weitere Farben bekommt man mit Funktionsaufrufen wie farbe(224, 114, 213) unter Verwendung des RGB-Farbmodells (RGB steht für Red-Green-Blue; verwende etwa den RGB Color Calculator auf https://www.w3schools.com/colors/colors_rgb.asp).
  • zeige(): Mit diesem Befehl wird alles bisher Gezeichnete sichtbar. (Die vorigen Zeichenbefehle zeichnen in Wirklichkeit “im Hintergrund”. Erst mit dem Funktionsaufruf zeige() wird alles angezeigt.)

Zum Anzeigen des bereits Gezeichneten muss man den Befehl zeige() verwenden.

  • pause(1.5): Pausiert 1.5 Sekunden.
  • speichere(“zeichnung.jpeg”): Speichert den Inhalt des Zeichenfensters in der Datei “zeichnung.jpeg”.
  • warte_auf_klick(): Lässt das Zeichenfenster so lange offen, bis der Benutzer hineinklickt oder Escape drückt oder es schliesst oder die Taste “q” drückt. Dieser Befehl steht üblicherweise ganz am Ende des Programms (und nirgendwo sonst).

Link zur Kursseite

  • lehrkraefte/snr/mathematik/klasse-2/2022-23/python-koordinatengrafik.txt
  • Last modified: 2023/01/31 17:37
  • by Olaf Schnürer