Start · Sprachen · PHP · Referenz · UI\Draw\Matrix

UI\Draw\Matrix

Klasse

Repräsentiert eine 2D-Transformationsmatrix für Zeichenoperationen im UI-Framework, mit der Skalierung, Rotation, Spiegelung und Translation kombiniert werden können.

seit PHP 0.9.9 Kategorie: misc

Signatur

class UI\Draw\Matrix

Beschreibung

UI\Draw\Matrix ist Teil der PHP-UI-Erweiterung (ui) und kapselt eine affine 2D-Transformationsmatrix. Solche Matrizen werden verwendet, um Zeichenoperationen wie Skalierung, Rotation, Translation oder Scherung auf UI\Draw\Path-Objekte und Zeichenkontexte anzuwenden, bevor diese auf einer UI\Draw\Pen gerendert werden.

Eine Transformationsmatrix kann durch die bereitgestellten Methoden schrittweise aufgebaut werden. Mehrere Transformationen lassen sich durch die Methode multiply() kombinieren. Die Reihenfolge der Anwendung ist dabei entscheidend, da Matrixmultiplikation nicht kommutativ ist – Rotation vor Translation ergibt ein anderes Ergebnis als Translation vor Rotation.

Typische Anwendungsfälle sind das Zoomen in eine Zeichenfläche (scale()), das Drehen von Objekten um einen Punkt (rotate()), das Verschieben des Koordinatenursprungs (translate()) sowie das Prüfen, ob eine Matrix invertierbar ist (isInvertible()) und das Invertieren (invert()).

Die Klasse wird typischerweise im Kontext des UI\Draw\Pen-Objekts eingesetzt, etwa über UI\Draw\Pen::transform(), um die Transformation auf nachfolgende Zeichenoperationen anzuwenden.

Beispiele

Rotation und Translation kombinieren

<?php
use UI\Draw\Matrix;
use UI\Point;

// Neue Transformationsmatrix erstellen
$matrix = new Matrix();

// Um 45 Grad (in Radiant) um den Punkt (100, 100) rotieren
$matrix->rotate(new Point(100, 100), M_PI / 4);

// Zusätzlich um 50 Einheiten nach rechts und unten verschieben
$matrix->translate(new Point(50, 50));

// Prüfen, ob die Matrix invertierbar ist
if ($matrix->isInvertible()) {
    echo "Matrix ist invertierbar." . PHP_EOL;
    $matrix->invert();
    echo "Matrix wurde invertiert." . PHP_EOL;
}
Matrix ist invertierbar. Matrix wurde invertiert.

Skalierung und Kombination zweier Matrizen

<?php
use UI\Draw\Matrix;
use UI\Size;
use UI\Point;

// Erste Matrix: Skalierung auf das Doppelte
$matrixA = new Matrix();
$matrixA->scale(new Point(0, 0), new Size(2, 2));

// Zweite Matrix: Verschiebung
$matrixB = new Matrix();
$matrixB->translate(new Point(30, 60));

// Beide Matrizen kombinieren (matrixA wird mit matrixB multipliziert)
$matrixA->multiply($matrixB);

echo "Matrizen erfolgreich kombiniert." . PHP_EOL;
Matrizen erfolgreich kombiniert.

// Wichtig · Fallstricke

Erweiterung erforderlich: UI\Draw\Matrix ist Teil der ui-PECL-Erweiterung (basierend auf libui), die separat installiert werden muss und nicht zum PHP-Kern gehört. Sie ist nicht in Standard-PHP-Installationen verfügbar.

Reihenfolge der Transformationen: Beachte, dass die Reihenfolge, in der Methoden wie rotate(), translate() und scale() aufgerufen werden, das Ergebnis erheblich beeinflusst, da Matrixmultiplikationen nicht kommutativ sind.

Invertierbarkeit prüfen: Vor dem Aufruf von invert() sollte stets isInvertible() geprüft werden, um Fehler bei singuläre Matrizen (z. B. bei einer Skalierung mit Faktor 0) zu vermeiden.