Eine Möglichkeit Höhendaten zweidimensional darzustellen wäre eine Heatmap (z.B. höher = heller) oder eine Schattierung. Für beide Darstellungen müssen wir einzelne Bildpunkte setzen und so ein Bild erstellen.
Modul «PIL»
Mit dem Modul PIL (heute Pillow) können wir mit Python Bilder erzeugen und bearbeiten. Wir machen ein Bild mit vorgegeben Dimensionen (Anzahl Pixel in Breite und Höhe) und setzen dann für jeden Pixel einen RGB-Farbwert:
Beispiel
Farbverlauf erstellen. Achtung Farbe-Werte RGB zwischen 0 und 255
from PIL import Image
image = Image.new(mode="RGB", size=(500, 250), color="blue")
pixel_map = image.load()
width, height = image.size
for y in range(height):
for x in range(width):
pixel_map[x,y] = (x, y, 255-(x+y)//2)
image.save("output.png", format="png") # speichern
image.show() # anzeigen (extern)- Zeile 1
- Wir importieren die Klasse
ImagevonPillow(PIL = Python Image Library) - ab Zeile 3
- Jetzt können wir ein Bild erstellen. Dazu geben wir Grösse und Hintergrundfarbe an.
Anschliesssen holen wir die Pixel-Map, also alle Bildpunkte anpsrechbar über Koordinaten.
Nun müssen wir noch die Dimenstionen des Bildes kennen. Die kriegen wir übersize. - ab Zeile 7
- Jetzt können wir in einer verschachtelten Schleife alle Bildpunkt durchgehen.
Dabei setzen wir für jeden Punkte ein Farbe basierend auf seinen Koordinaten. - ab Zeile 11
- Schlussendlich müssen wir das Ergebnis speichern oder anzeigen
Hilfsfunktion «clamp»
Wir brauchen eine Hilfsfunktion welche die Werte einschränkt, wie eine Klammer:

So können wir sicherstellen, dass der Wert x zwischen a und b «eingeklammert» wird, also b nicht über- und a nicht unterschreitet.
Aufgabe: Hilfsfunktion «clamp»
Definiere eine Funktion clamp(). Diese erhält drei Argumente a, x und b.
Der Rückgabewert ist x auf den Bereich zwischen a und b eingeschränkt. Wenn wir also clamp(0, x, 255) aufrufen, stellen wir sicher, dass auch wenn
def clamp(a, x, b):
return xTipp: Verwende die vorhandenen Funktionen max und min oder arbeite mit if-else.
Hier kannst du deine clamp-Funktion testen:
# Test für Farbkanal
for x in [-23, 0, 12, 34, 255, 300, 1020]:
r = clamp(0,x,255)
print(" {:5} -> {:5}".format(x,r))
# Test für floats
import random
i = 0
while i<8:
r = random.random()
z = clamp(0.4, r, 0.6)
print("{:2f} -> {:2f}".format(r,z))
i = i + 1Heatmap
Aufgabe: Heatmap
Wir können die Höhenangaben als Heatmap darstellen: Hohe Punkte hell, tiefe Punkte dunkel. Dazu müssen wir aus der Höhe einen Grauwert zwischen 0 und 255 berechnen und dem zur Koordinate passenden Punkt im Bild zuweisen.
Alternativ kann man auch je nach Höhe einen Wert zuweisen:
- höchste Punkte weiss (Schnee)
- hohe Punkte grau (Fels)
- tiefere Punkte grün (Wald/Gras)
- tiefste Punkte blau (Meer, Fluss, See)

Schattierung
Aufgabe: Schattierung
Um eine Schattierung zu berechnen, vergleichen wir jede Koordinate mit einer Nachbarkoordinate. Aus dem Höhenunterschied können wir einen Wert berechnen, z.B.
- bei gleicher Höhe grau
- höher = heller
- tiefer = dunkler
