<?php

// ------------------------------------------------------------------------- //
// Créer des stats visuelles sous forme de "camembert"                       //
// ------------------------------------------------------------------------- //
// Auteur: Fabrice Potec <fpotec@nerim.fr>                                   //
// Web:    http://www.djfab.net/                                             //
// ------------------------------------------------------------------------- //

/*
fonction qui crée un camembert (stats visuelles) suivant des valeurs entrantes.
Cette fonction est une adaptation d'une fonction trouvée dans un bouquin à ma
sauce.
*/

// ================================================== //
// La librairie graphique php3_gd doit être installée.
// Sous windows ajoutez au début : dl("php3_gd.dll");
// ================================================== //

// dl("php3_gd.dll"); // uniquement sous windows (laissez en commentaire sinon)

/*
  Cette fonction permet de dessiner une portion de camembert
*/

function Portion($xc,$yc,$diametre,$epaisseur,$dep,$couleur,$image,$caption)
{
/* Définition de la couleur du fond (R,V,B) */
$bgcolor = imagecolorallocate($image, 0, 0, 0);

for(
$i=$diametre ; $i>=0 ; $i-- )
    {
     
imagearc($image,$xc,$yc,$i,$i,$dep,$dep+$epaisseur,$couleur);
    }
    
$alpha = ($dep + ($epaisseur/2)) * ((2*M_PI)/360);

$cs    = 95 * cos($alpha);
$sn    = 95 * sin($alpha);
$xt    = $xc + $cs;
$yt    = $yc + $sn;

imagestring($image, 2, $xt, $yt, $caption, $bgcolor);
}


/*
  Cette fonction construit le camembert à partir du tableau des valeurs ($tb)
*/

function Camembert($tabval)
{
$img           = imagecreate(230,200);

/* Définition de la couleur de la police (R,V,B) */
$fontcolor     = imagecolorallocate($img, 255, 255, 255);

imagefill($img, 0, 0, $fontcolor);

$total = 0;
for(
$i=0 ; $i<sizeof($tabval) ; $i++ )
    {
     
$total = $total + $tabval[$i];     
    }
$unite = 360/$total;
$begin = 190;

for(
$i=0 ; $i<sizeof($tabval) ; $i++ )
    {
     
/*
       Définition des couleurs des portions (ici 5 couleurs sont définies).
       Veillez à définir autant de couleurs que de valeurs entrantes dans "$tb".
     */
     
if( $i == 0 )
         {
$col1 = "255";  $col2 = "0"; $col3 = "0"; }  # rouge  (1e portion)
     
if( $i == 1 )
         {
$col1 = "0"; $col2 = "0"; $col3 = "255";  }  # bleu   (2e portion)
     
if( $i == 2 )
         {
$col1 = "255"; $col2 = "255"; $col3 = "0"; } # jaune  (3e portion)
     
if( $i == 3 )
         {
$col1 = "0";  $col2 = "255"; $col3 = "0"; }  # vert   (4e portion)
     
if( $i == 4 )
         {
$col1 = "255"; $col2 = "0"; $col3 = "255"; } # violet (5e portion)
     
if( $i >= 5 )
         {
$col1 = "0"; $col2 = "0"; $col3 = "0"; }     # noir   (au dela)
     
     
$coul      = imagecolorallocate($img,$col1,$col2,$col3);
     
$part  = $tabval[$i]*$unite;
     
portion(110, 100, 120, $part, $begin, $coul, $img, number_format($tabval[$i],1)." %");
     
$begin = $begin + $part;   
    }
    
  
$Camembert = imagegif($img);
}

/* Le total des valeurs entrantes doit être égal à 100 pour ne pas fausser
   les stats */
$tb = array(5.3,14.9,19.2,40.1,20.5);

/* Appel de la fonction */
Camembert($tb);

?>