Rechercher : dans
Par :

PHP et GD ==> Camembert !

Dernière réponse le 20 avr 2009 à 09:41:03 gaerebut, le 20 avr 2009 à 05:22:40 
 Signaler ce message aux modérateurs

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/...

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 Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...
Configuration: Windows Vista
Firefox 3.0.8

Meilleures réponses pour « PHP et GD ==> Camembert ! » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
PHP - Génération d'images VoirPrérequis PHP permet de créer des images au format GIF à l'aide d'une librairie de fonctions prévue à cet effet. La librairie permettant de créer et manipuler des fichiers graphiques se nomme GD, ainsi, pour pouvoir utiliser ces fonctions il faut...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...

1

le père, le 20 avr 2009 à 09:11:14

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.

Répondre à le père

2

 le père, le 20 avr 2009 à 09:41:03
  • +1

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 :

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);

Répondre à le père
Collection CommentÇaMarche.net