Con minimi cambiamenti rispetto al grafico Diagramma circolare con legende circolari e standard è possibile creare l'effetto 3d.
Il primo passo è creare un nuovo elenco di colori leggermente diversi da quegli in uso, usare poi questo nuovo elenco per l'effetto 3d.
Le differenze sono:
$Totale = array_sum($Valori); // totale quintali rappresentati
$Colori = array();
$ColoreIniziale = 18;
for($i=$ColoreIniziale; $i < ($ColoreIniziale+ count($Valori)); $i++)
{$ColoreRGB = GeneraColori($i , $ColoreIniziale+ count($Valori)); // genera colori
$Colori[$i - $ColoreIniziale] =
imagecolorallocate($Immagine, $ColoreRGB[0], $ColoreRGB[1], $ColoreRGB[2]);
// Sposta verso destra i bit canale colore
$Colori[$i] =
imagecolorallocate($Immagine, $ColoreRGB[0]>>1, $ColoreRGB[1]>>1, $ColoreRGB[2]>>1);//colore per 3D
}
Il secondo passo è disegnare delle circonferenze per creare l'effetto tridimensionale
La variabile $i sposta sull'asse Y il centro della circonferenza del quale l'arco fa parte disegnando 30 circonferenze formate da archi dei colori corrispondenti alle regioni.
IMG_ARC_NOFILL indica che l'arco che congiunge l'angolo di partenza e quello di arrivo sono sottolineati ma non è riempita l'area circoscritta.
Notare che vengono usate le tonalità scure colori
for($i= 0;$i<30;$i++){
foreach($Valori as $index => $V ) { // scorre array $Valori e $Colori, disegnando gli archi
$Arco = number_format((360 * $V) / $Totale); // dimensioni angolo/arco corrente
imagefilledarc($Immagine,
$Cx, $Cy + $i, // coordinate x,y del centro
$Raggio, $Raggio,
$InizioArco,
($InizioArco + $Arco), // fine arco
$Colori[$index + $ColoreIniziale], // colore corrente per 3D
IMG_ARC_NOFILL // area circoscritta è riempita con $Colori[$index + $ColoreIniziale]
);
$InizioArco += $Arco; // inizio nuovo arco
}
}
imagepng($Immagine,"es_110_grafico_a_torta_3d_1.png"); // salva immagine intermedia