Eine einfache 2D-Vektorklasse für Python, die ich ursprünglich für die Nutzung mit NodeBox 1 geschrieben hatte. Sie ist in Anlehnung an die PVector-Klasse von Processing (Java) geschrieben und so allgemein gehalten, daß sie auch mit anderen Bibliotheken laufen sollte. Getestet habe ich sie – neben der NodeBox – bisher mit Pythons Turtle-Modul und mit P5 (Python).
Die Klasse läuft mit Python 2.7 und mit Python >= 3.5, sie sollte daher auch unter PyGame und unter Jython (TigerJython) lauffähig sein. Bisher einzige Abhängigkeiten sind die Module math und random aus der Standardbibliothek.
Bisher sind folgende Methoden in der Klasse implementiert:
pvector.set(v): Setter-Methodepvector.get(): Getter-Methodepvector.add(v): Elementweise Additionpvector.sub(v): Elementweise Subtraktionpvector.mult(s): Multiplikation mit einem Skalarpvector.div(s): Division durch einen Skalarpvector.mult2(v): Elementweise Multiplikation eines Vektor mit einem anderen Vektorpvector.div2(v): Elementweise Division eines Vektor mit einem anderen Vektorpvector.mag(): Magnitudepvector.normalize(): Normalisierungpvector.dist(v): Berechnung der euklidischen Distanz zwischen zwei Vektorenpvector.dot(v): Berechnung des Skalarprodukts (inneren Produkts) eines Vektorspvector.limit(max): Begrenzt die Magnitude eines Vektors auf maxpvector.heading(): Berechnet den Winkel der Rotation eines Vektors
Und als Klassenmethoden:
PVector.random2D(): Erzeugt einen zufälligen Vektor der Länge 1PVector.smult(v, s): Erzeugt einen neuen Vektorv1 = v*sPVector.sdiv(v, s): Erzeugt einen neuen Vektorv1 = v/s(s != 0)
Außerdem die folgenden »besonderen« Methoden:
pvector.__add__: Erlaubt die elementweise Addition zweier Vektoren in der Schreibweisev3 = v1 + v2pvector.__sub__: Erlaubt die elementweise Subtraktion zweier Vektoren in der Schreibweisev3 = v1 - v2pvector.__str__: Gibt eine textliche Repräsentation des Vektors aus.
Die Methoden sollten so aufgerufen werden können und funktionieren, wie es in der Referenz zur PVector-Klasse in der Processing-Dokumentation beschrieben ist. Es ist jedoch eine reine 2D-Klasse, mit 3D- oder noch höherwertigen Vektoren funktioniert sie nicht.