PHP et GD ==> Camembert !
gaerebut
Messages postés
1060
Statut
Membre
-
le père -
le père -
Bonjour,
je n'arrive pas à faire fonctionner correctement un algorithme pour faire un camembert en PHP via la bibliothèque GD !
L'algorithme que j'utilise est celui-là : http://www.manuelphp.com/php/function.imagefilledarc.php
Voici tout de suite un lien qui montre le résultat de mon code : http://ns5.freeheberg.com/~infotuto//GD/image.php?ordre=0&type=2&ga=null&go=null&quadrillage=null&valeurs=1,2,3,4,5,6,7,8,9,10
Comme vous pouvez le voir, il y a un problème au niveau du 3D ! :(
Voici mon algo :
Bon, j'ai mis juste l'essentiel à l'algo, j'ai pas mis tout ce qui est la gestion des couleurs ($clair et $sombre).
Si quelqu'un pouvait m'aider/aiguiller un peu !
Merci à tous
A+
Gaerebut
je n'arrive pas à faire fonctionner correctement un algorithme pour faire un camembert en PHP via la bibliothèque GD !
L'algorithme que j'utilise est celui-là : http://www.manuelphp.com/php/function.imagefilledarc.php
Voici tout de suite un lien qui montre le résultat de mon code : http://ns5.freeheberg.com/~infotuto//GD/image.php?ordre=0&type=2&ga=null&go=null&quadrillage=null&valeurs=1,2,3,4,5,6,7,8,9,10
Comme vous pouvez le voir, il y a un problème au niveau du 3D ! :(
Voici mon algo :
foreach($arrListe as $value){ // On lit les valeurs une par une
$moyenne_valeur = ($value * 100)/$somme; // Moyenne de chaque valeurs par rapport au total des valeurs
$arclen = (360 * $moyenne_valeur) / 100; // Grandeurs de la portion correspondant à la valeur courrante
if($pourcentage <= 180)
for ($i = 260; $i > 230; $i--) imagefilledarc($image, 400, $i, 425, 225, $last_angle, ($last_angle + $arclen) , $sombre, IMG_ARC_PIE);
imagefilledarc($image, 400, 231, 425, 225, $last_angle, ($last_angle + $arclen) , $clair, IMG_ARC_PIE);
$last_angle += $arclen;
$pourcentage += $arclen;
}
}
Bon, j'ai mis juste l'essentiel à l'algo, j'ai pas mis tout ce qui est la gestion des couleurs ($clair et $sombre).
Si quelqu'un pouvait m'aider/aiguiller un peu !
Merci à tous
A+
Gaerebut
A voir également:
- PHP et GD ==> Camembert !
- Camembert excel - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Camembert graphique en ligne - Guide
- Php alert ✓ - Forum PHP
2 réponses
Re-
Je n'avais pas bien regardé l'algorithme du lien que tu as donné, en fait il marche à tous les coups et il est très simple.
Il consiste à dessiner tout le camembert en couleurs sombres, de bas en haut.
Puis on redessine le dessus en couleurs claires
Or toi tu dessines part par part. Et de plus, dans le dessin de chaque couche, tu alternes couleur sombre/couleur claire.
Donc tu ne respectes pas du tout l'aglorithme de l'exemple.
Ça devrait donner quelque chose du genre :
Je n'avais pas bien regardé l'algorithme du lien que tu as donné, en fait il marche à tous les coups et il est très simple.
Il consiste à dessiner tout le camembert en couleurs sombres, de bas en haut.
Puis on redessine le dessus en couleurs claires
Or toi tu dessines part par part. Et de plus, dans le dessin de chaque couche, tu alternes couleur sombre/couleur claire.
Donc tu ne respectes pas du tout l'aglorithme de l'exemple.
Ça devrait donner quelque chose du genre :
function unecouche ($image,$posy,$couleur,$arrliste,$somme) {
$last_angle=0;
foreach($arrListe as $value){ // On lit les valeurs une par une
$moyenne_valeur = ($value * 100)/$somme; // Moyenne de chaque valeurs par rapport au total des valeurs
$arclen = (360 * $moyenne_valeur) / 100; // Grandeurs de la portion correspondant à la valeur courante
imagefilledarc($image, 400, $posy, 425, 225, $last_angle, ($last_angle + $arclen) , $couleur, IMG_ARC_PIE);
$last_angle+=$arclen;
} // function unecouche ($couleur,$arrliste) {
// traçage de l'épaisseur
for ($i = 260; $i > 230; $i--) unecouche( $image,$i,$sombre,$arrliste,$somme);
// traçage de la surface
unecouche( $image,230,$clair,$arrliste,$somme);
Bonjour
Pas très évident. Il faudrait commencer par dessiner les parts de camembert qui sont dans le fond, et terminer par celle qui est face à l'observateur. Comme je ne suis pas sûr d'imaginer tous les cas de figure, je ne suis même pas tout à fait sûr du résultat.
Si j'avais à le faire, je tenterais une approche 2D sur une ellipse, beaucoup plus simple, puis je tracerais des segments qui "descendent" du bord de l'ellipse pour faire l'épaisseur du camembert, sur la plage d'angles située face à l'observateur (de 180 à 360 degrés ? ça dépend de ton repère). Ça ne doit pas être très simple non plus, mais on est sûr du résultat comme ça.
Pas très évident. Il faudrait commencer par dessiner les parts de camembert qui sont dans le fond, et terminer par celle qui est face à l'observateur. Comme je ne suis pas sûr d'imaginer tous les cas de figure, je ne suis même pas tout à fait sûr du résultat.
Si j'avais à le faire, je tenterais une approche 2D sur une ellipse, beaucoup plus simple, puis je tracerais des segments qui "descendent" du bord de l'ellipse pour faire l'épaisseur du camembert, sur la plage d'angles située face à l'observateur (de 180 à 360 degrés ? ça dépend de ton repère). Ça ne doit pas être très simple non plus, mais on est sûr du résultat comme ça.