Aktueller Standort: Startseite> Neueste Artikel> Wie man die ImageOpenpolygon () -Zeichnerrichtung durch Rotationstransformation ändert

Wie man die ImageOpenpolygon () -Zeichnerrichtung durch Rotationstransformation ändert

M66 2025-05-29

Beim Zeichnen von Grafiken mithilfe der GD -Bibliothek in PHP kann die Funktion imageOpenpolygon () zum Zeichnen eines offenen Polygons verwendet werden (d. H. Polylines, die nicht mit dem Ende verbunden sind). Standardmäßig wird ImageOpenPolygon () direkt basierend auf dem von Ihnen bereitgestellten Punkt -Set gezeichnet. Wenn Sie die Zeichnungsrichtung des Polygons einstellen möchten, z. B. das Drehen in einem bestimmten Winkel, müssen Sie die Koordinatenpunkte drehen.

In diesem Artikel wird detailliert erläutert, wie die Rotationstransformation auf den von ImageOpenpolygon () in PHP gezeichneten Diagramm angewendet wird.

Verstehen Sie das Prinzip der Rotationstransformation

Auf einer zweidimensionalen Ebene lautet nach dem Drehen eines Winkels θ um den Ursprung (0, 0) die Berechnungsformel für die neue Koordinate (x ', y') :

 x' = x * cos(θ) - y * sin(θ)
y' = x * sin(θ) + y * cos(θ)

Wenn Sie sich um einen beliebigen Punkt (CX, CY) drehen möchten, müssen Sie zuerst die Koordinaten in den Ursprung übersetzen und sie dann zurücksetzen:

 x' = cos(θ) * (x - cx) - sin(θ) * (y - cy) + cx
y' = sin(θ) * (x - cx) + cos(θ) * (y - cy) + cy

Anwenden der Rotationstransformation in PHP

Wir können eine kleine Funktion schreiben, um eine Reihe von Punkten basierend auf der obigen Formel zu drehen. Hier ist ein vollständiges Beispiel dafür, wie Sie ein Bild erstellen, ein gedrehtes Polygon zeichnen und das Ergebnis ausgeben.

 <?php
// Rotationsfunktion definieren
function rotatePoints(array $points, float $angleDegrees, float $centerX = 0, float $centerY = 0): array {
    $angleRadians = deg2rad($angleDegrees);
    $cosTheta = cos($angleRadians);
    $sinTheta = sin($angleRadians);
    $rotatedPoints = [];

    for ($i = 0; $i < count($points); $i += 2) {
        $x = $points[$i];
        $y = $points[$i + 1];

        $xRotated = $cosTheta * ($x - $centerX) - $sinTheta * ($y - $centerY) + $centerX;
        $yRotated = $sinTheta * ($x - $centerX) + $cosTheta * ($y - $centerY) + $centerY;

        $rotatedPoints[] = $xRotated;
        $rotatedPoints[] = $yRotated;
    }

    return $rotatedPoints;
}

// Erstellen Sie eine Leinwand
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);

// Farben zuweisen
$backgroundColor = imagecolorallocate($image, 255, 255, 255);
$lineColor = imagecolorallocate($image, 0, 0, 0);

// Füllen Sie den Hintergrund
imagefill($image, 0, 0, $backgroundColor);

// Definieren Sie den ursprünglichen Punktsatz(Ein einfaches Dreieck)
$points = [
    200, 100,  // Punkt1
    300, 300,  // Punkt2
    100, 300   // Punkt3
];

// Stellen Sie den Drehwinkel ein
$angle = 45; // Drehen im Uhrzeigersinn45Grad

// 计算Drehen后的Punkt集
$rotatedPoints = rotatePoints($points, $angle, 200, 200); // Um das Zentrum(200,200)Drehen

// 绘制Drehen后的开放多边形
imageopenpolygon($image, $rotatedPoints, count($rotatedPoints) / 2, $lineColor);

// Ausgabe Bild zum Browser
header('Content-Type: image/png');
imagepng($image);

// Ressourcen zerstören
imagedestroy($image);
?>

Dinge zu beachten

  • ImageOpenpolygon () erfordert, dass das Punktarray ein eindimensionales Array in der Reihenfolge ist [x1, y1, x2, y2, ..., xn, yn] .

  • Beim Drehen ist es am besten, die Mitte der Figur als Rotationszentrum zu verwenden, damit die Figur nicht von der Mitte der Leinwand abweicht.

  • Die eingebaute trigonometrische Funktion von PHP besteht in Einheiten von Radians, sodass Deg2rad () verwendet wird, um den Winkel in Radians umzuwandeln.

Abschluss

Durch die einfache Rotationstransformationsverarbeitung können wir die von ImageOpenpolygon () gezeichnete Figur in jedem Winkel drehen, der sehr flexibel ist. Wenn Sie mehr über Tipps zur PHP -Bildverarbeitung erfahren möchten, können Sie sich hier auf das detaillierte Tutorial verweisen.

Ich hoffe, dieser Artikel kann Ihnen helfen, die Kombination von ImageOpenpolygon () und Rotationstransformation in PHP besser zu verstehen!