KAPITEL 1 VON 7

Koordinaten

Jeder Ort in der Spielwelt ist ein Punkt (x | y | z). Fast alles, was ein Spiel mit seiner Welt tut, ist Rechnen mit solchen Zahlentripeln.

x zeigt nach rechts, y nach oben, z in die Tiefe. In Python ist ein Punkt einfach eine Liste mit drei Zahlen:

p = [2, 1, 2]        # x, y, z

Die Szene lässt sich mit der Maus drehen. Der Regler α dreht den Punkt um die y-Achse.

Drei Grundoperationen

Verschieben

Eine Bewegung ist eine Addition, Koordinate für Koordinate.

def verschiebe(p, v):
    return [p[0] + v[0], p[1] + v[1], p[2] + v[2]]

Abstand

Der Abstand zweier Punkte folgt aus dem Satz des Pythagoras, zweimal angewendet: erst in der Bodenebene, dann mit der Höhe.

def abstand(p, q):
    dx, dy, dz = q[0] - p[0], q[1] - p[1], q[2] - p[2]
    return (dx*dx + dy*dy + dz*dz) ** 0.5

Drehen um die y-Achse

Bei einer Drehung um die y-Achse bleibt y gleich. x und z bewegen sich auf einem Kreis, beschrieben durch Sinus und Kosinus:

from math import sin, cos

def drehe_y(p, alpha):               # alpha im Bogenmaß
    x, y, z = p
    return [x * cos(alpha) + z * sin(alpha),
            y,
            -x * sin(alpha) + z * cos(alpha)]

Aufwand

Jede dieser Operationen kostet eine feste, kleine Zahl von Rechenschritten. Eine Figur besteht aber aus vielen Punkten. Dreht sich eine Figur mit 50 000 Punkten, wird drehe_y in jedem Bild 50 000-mal aufgerufen. Der Aufwand wächst linear mit der Zahl der Punkte n, man schreibt O(n).

Merke
Ein Punkt ist eine Liste [x, y, z]. Verschieben ist Addieren, der Abstand folgt aus Pythagoras, Drehen aus Sinus und Kosinus. Der Aufwand für eine Figur wächst linear mit der Zahl ihrer Punkte.

Aufgabe: Schreibe eine Funktion skaliere(p, k), die einen Punkt vom Ursprung aus um den Faktor k streckt. Was passiert mit dem Abstand zum Ursprung?

Lösung anzeigen

return [p[0]*k, p[1]*k, p[2]*k]. Der Abstand zum Ursprung wird ebenfalls mit k multipliziert.