Position actuelle: Accueil> Derniers articles> Générez dynamiquement un tableau de coordonnées pour dessiner des polygones avec des bords arbitraires

Générez dynamiquement un tableau de coordonnées pour dessiner des polygones avec des bords arbitraires

M66 2025-05-29

Dans le domaine du traitement d'image, le dessin des graphiques utilisant la bibliothèque GD de PHP est une compétence commune. Parmi eux, la fonction ImageOpenPolygon (le nom de fonction correct doit être ImagePolygon ) peut être utilisé pour dessiner des polygones de n'importe quel nombre de bords. Cet article introduira en détail comment générer dynamiquement des tableaux de coordonnées et les utiliser pour dessiner des côtés en N.

1. Qu'est-ce que ImagePolygon?

ImagePolygon () est une fonction utilisée dans la bibliothèque PHP GD pour dessiner des polygones.
Son utilisation de base est la suivante:

 bool imagepolygon(
    GdImage $image,
    array $points,
    int $num_points,
    int $color
)
  • $ Image est une ressource d'image;

  • $ points est un tableau de points, un format tel que [x1, y1, x2, y2, ..., xn, yn] ;

  • $ num_points est le nombre de points (pas le nombre d'éléments de tableau, divisés par 2);

  • $ couleur est la couleur dessinée.

2. Comment générer dynamiquement des tableaux de coordonnées?

Pour dessiner des polygones de n'importe quel nombre d'arêtes (comme les pentagones, les octagones, etc.), nous pouvons utiliser une fonction trigonométrique simple pour générer des coordonnées. L'idée est la suivante:

  • Réglez le point central du polygone (CX, Cy) ;

  • Réglez le rayon R (c'est-à-dire la distance entre le centre et le sommet);

  • Distribuez chaque sommet uniformément à 360 °;

  • Les coordonnées de chaque sommet peuvent être calculées par sinus ( péché ) et cosinus ( cos ).

La formule est:

 x = cx + r * cos(angle)
y = cy + r * sin(angle)

Notez que les angles reçus par PHP cos () et sin () sont des radians, et il doit être converti à l'aide de deg2rad () .

3. Exemple PHP complet

Voici un exemple complet montrant comment générer dynamiquement des coordonnées et dessiner un polygone de n'importe quel nombre de bords:

 <?php
// Définir la taille de l&#39;image
$width = 400;
$height = 400;

// Créer une toile
$image = imagecreatetruecolor($width, $height);

// Attribuer des couleurs
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

// Remplir l&#39;arrière-plan
imagefill($image, 0, 0, $white);

// Paramètres de polygone
$number_of_sides = 7; // Par exemple,Dessiner des heptagones
$radius = 150; // rayon
$centerX = $width / 2;
$centerY = $height / 2;

// Générer des points de coordonnées
$points = [];
for ($i = 0; $i < $number_of_sides; $i++) {
    $angle_deg = (360 / $number_of_sides) * $i - 90; // Commencez à dessiner du haut
    $angle_rad = deg2rad($angle_deg);
    $x = $centerX + $radius * cos($angle_rad);
    $y = $centerY + $radius * sin($angle_rad);
    $points[] = (int)$x;
    $points[] = (int)$y;
}

// Dessiner des polygones
imagepolygon($image, $points, $number_of_sides, $black);

// Sortir des images au navigateur
header('Content-Type: image/png');
imagepng($image);

// Détruire les ressources
imagedestroy($image);
?>

Enregistrez le code ci-dessus en tant que fichier PHP (tel que polygon.php ) et y accédez via le navigateur, vous pouvez voir un heptagon ordinaire.

Iv. Exemple description

  • En ajustant la variable $ nombre_of_sides , vous pouvez dessiner des polygones avec différents nombres de côtés;

  • $ radius détermine la taille du polygone;

  • Le décalage de l'angle (voici -90 degrés) rend le premier sommet en haut, ce qui rend l'effet plus beau;

  • Si vous devez enregistrer l'image sur le serveur, vous pouvez utiliser l'imagepng ($ image, 'path / to / file.png') .

Par exemple, enregistrez l'image sur m66.net/uploads/polygon.png :

 imagepng($image, '/var/www/m66.net/uploads/polygon.png');

Veillez à vous assurer que le répertoire de sauvegarde a une autorisation d'écriture!

5. Résumé

En utilisant la fonction ImagePolygon de PHP combinée à un fonctionnement trigonométrique simple, nous pouvons facilement dessiner des polygones réguliers de n'importe quel nombre de bords. Ceci est très utile lors de la fabrication de générateurs de graphiques, de codes de vérification et de composants de graphique. À l'avenir, si vous souhaitez dessiner un polygone avec un remplissage de couleur, vous pouvez également combiner la fonction ImageFildPolygon () pour l'implémenter.