Lors du dessin de graphiques à l'aide de la bibliothèque GD en PHP, la fonction ImageOpenPolygon () peut être utilisée pour dessiner un polygone ouvert (c'est-à-dire des polylines qui ne sont pas connectées à la fin). Par défaut, ImageOpenPolygon () est dessiné directement en fonction de l'ensemble de points que vous fournissez. Si vous souhaitez ajuster la direction de dessin du polygone, comme la faire tourner à un certain angle, vous devez faire pivoter les points de coordonnées.
Cet article expliquera en détail comment appliquer la transformation de rotation au graphique dessiné par imageOpenPolygon () dans PHP.
Sur un plan bidimensionnel, après avoir tourné un angle θ autour de l'origine (0, 0) , la formule de calcul pour la nouvelle coordonnée (x ', y') est:
x' = x * cos(θ) - y * sin(θ)
y' = x * sin(θ) + y * cos(θ)
Si vous souhaitez tourner autour de n'importe quel point (CX, CY) , vous devez d'abord traduire les coordonnées en origine, puis les traduire en arrière:
x' = cos(θ) * (x - cx) - sin(θ) * (y - cy) + cx
y' = sin(θ) * (x - cx) + cos(θ) * (y - cy) + cy
Nous pouvons écrire une petite fonction pour faire pivoter un ensemble de points en fonction de la formule ci-dessus. Voici un exemple complet de la façon de créer une image, de dessiner un polygone tourné et de sortir le résultat.
<?php
// Définir la fonction de rotation
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;
}
// Créer une toile
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);
// Attribuer des couleurs
$backgroundColor = imagecolorallocate($image, 255, 255, 255);
$lineColor = imagecolorallocate($image, 0, 0, 0);
// Remplir l'arrière-plan
imagefill($image, 0, 0, $backgroundColor);
// Définir le jeu de points d'origine(Un simple triangle)
$points = [
200, 100, // indiquer1
300, 300, // indiquer2
100, 300 // indiquer3
];
// Régler l'angle de rotation
$angle = 45; // Faire tourner dans le sens des aiguilles d'une montre45Degré
// 计算Tourner后的indiquer集
$rotatedPoints = rotatePoints($points, $angle, 200, 200); // Autour du centre(200,200)Tourner
// 绘制Tourner后的开放多边形
imageopenpolygon($image, $rotatedPoints, count($rotatedPoints) / 2, $lineColor);
// Image de sortie au navigateur
header('Content-Type: image/png');
imagepng($image);
// Détruire les ressources
imagedestroy($image);
?>
ImageOpenPolygon () nécessite que le tableau de points soit un tableau unidimensionnel dans l'ordre [x1, y1, x2, y2, ..., xn, yn] .
Lors de la rotation, il est préférable d'utiliser le centre de la figure comme centre de rotation afin que la figure ne s'écarte pas du centre de la toile.
La fonction trigonométrique intégrée de PHP est en unités de radians, deg2rad () est donc utilisée pour convertir l'angle en radians.
Grâce à un traitement de transformation de rotation simple, nous pouvons faire tourner la figure dessinée par ImageOpenPolygon () à n'importe quel angle, ce qui est très flexible. Si vous souhaitez en savoir plus sur les conseils de traitement d'image PHP, vous pouvez vous référer au tutoriel détaillé ici .
J'espère que cet article peut vous aider à mieux comprendre la combinaison de ImageOpenPolygon () et de la transformation de rotation en PHP!