mf_2
2007-05-27, 15:47:52
Hallo,
Ich stehe vor einer schier unlösbaren Aufgabe.
Ich habe ein Kuchendiagrammscript geschrieben. Das Diagramm besteht immer aus 8 Teilen mit variabler Größe.
Leider scheitere ich daran, auf der Grundlage der variablen Größe die Schrift positionieren zu können.
Ich will jedes Kuchenstück mit einem Wort (und dem Prozentwert, der ja schon am Anfang berechnet wird) beschriften, allerdings sollen die Beschriftungen immer neben dem Kuchen sein (daher der viele Rand).
Hier mal mein Code:
<?php
$Gesamt = $_REQUEST['Gesamt'];
$GruppeA = $_REQUEST['GruppeA'];
$GruppeB = $_REQUEST['GruppeB'];
$GruppeC = $_REQUEST['GruppeC'];
$GruppeD = $_REQUEST['GruppeD'];
$GruppeE = $_REQUEST['GruppeE'];
$GruppeF = $_REQUEST['GruppeF'];
$GruppeG = $_REQUEST['GruppeG'];
$GruppeH = $_REQUEST['GruppeH'];
$PerGruppeA = ceil(($GruppeA/$Gesamt)*100);
$PerGruppeB = ceil(($GruppeB/$Gesamt)*100);
$PerGruppeC = ceil(($GruppeC/$Gesamt)*100);
$PerGruppeD = ceil(($GruppeD/$Gesamt)*100);
$PerGruppeE = ceil(($GruppeE/$Gesamt)*100);
$PerGruppeF = ceil(($GruppeF/$Gesamt)*100);
$PerGruppeG = ceil(($GruppeG/$Gesamt)*100);
$PerGruppeH = ceil(($GruppeH/$Gesamt)*100);
$DegGruppeA = ceil(($GruppeA/$Gesamt)*360);
$DegGruppeB = ceil(($GruppeB/$Gesamt)*360);
$DegGruppeC = ceil(($GruppeC/$Gesamt)*360);
$DegGruppeD = ceil(($GruppeD/$Gesamt)*360);
$DegGruppeE = ceil(($GruppeE/$Gesamt)*360);
$DegGruppeF = ceil(($GruppeF/$Gesamt)*360);
$DegGruppeG = ceil(($GruppeG/$Gesamt)*360);
$DegGruppeH = ceil(($GruppeH/$Gesamt)*360);
// create a 401*401 image
$img = imagecreatetruecolor(601, 601);
// allocate some colors
$black = imagecolorallocate($img, 0, 0, 0);
$red = imagecolorallocate($img, 255, 0, 0);
$green = imagecolorallocate($img, 0, 255, 0);
$blue = imagecolorallocate($img, 0, 0, 255);
$white = imagecolorallocate($img, 255, 255, 255);
$yellow = imagecolorallocate($img, 255, 255, 0);
$MainBGColorHex = imagecolorallocate($img, hexdec($MainBGColor[1].$MainBGColor[2]), hexdec($MainBGColor[3].$MainBGColor[4]), hexdec($MainBGColor[5].$MainBGColor[6]));
$MainBGColorHex = imagecolorallocate($img, 170, 221, 255);
// draw the background rectangle
imagefilledrectangle($img,0,0,601,601,$MainBGColorHex);
$pointer = 0;
// draw an arc of x degrees length
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeA, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeA, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
//Beschriftung("A",$pointer,$pointer+$DegGruppeA);
$pointer = $pointer+$DegGruppeA;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeB, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeB, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeB;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeC, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeC, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeC;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeD, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeD, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeD;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeE, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeE, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeE;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeF, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeF, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeF;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeG, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeG, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeG;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeH, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeH, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeH;
// draw the circle for the cake graphic (draw this last for best results)
imagearc($img, 300, 300, 400, 400, 0, 360, $black);
/*
Winkelfunktionen, länge 200, prozent*3.6 = gradanzahl, pixel für endpunkt der linie????
*/
// output image in the browser
header("Content-type: image/png");
imagepng($img);
// free memory
imagedestroy($img);
?>
GruppeA bis GruppeH enthalten die Werte, zusammen ergeben sie 'Gesamt'.
Könnt ihr mir da evtl. weiterhelfen?
Danke schonmal!
mf_2
Ich stehe vor einer schier unlösbaren Aufgabe.
Ich habe ein Kuchendiagrammscript geschrieben. Das Diagramm besteht immer aus 8 Teilen mit variabler Größe.
Leider scheitere ich daran, auf der Grundlage der variablen Größe die Schrift positionieren zu können.
Ich will jedes Kuchenstück mit einem Wort (und dem Prozentwert, der ja schon am Anfang berechnet wird) beschriften, allerdings sollen die Beschriftungen immer neben dem Kuchen sein (daher der viele Rand).
Hier mal mein Code:
<?php
$Gesamt = $_REQUEST['Gesamt'];
$GruppeA = $_REQUEST['GruppeA'];
$GruppeB = $_REQUEST['GruppeB'];
$GruppeC = $_REQUEST['GruppeC'];
$GruppeD = $_REQUEST['GruppeD'];
$GruppeE = $_REQUEST['GruppeE'];
$GruppeF = $_REQUEST['GruppeF'];
$GruppeG = $_REQUEST['GruppeG'];
$GruppeH = $_REQUEST['GruppeH'];
$PerGruppeA = ceil(($GruppeA/$Gesamt)*100);
$PerGruppeB = ceil(($GruppeB/$Gesamt)*100);
$PerGruppeC = ceil(($GruppeC/$Gesamt)*100);
$PerGruppeD = ceil(($GruppeD/$Gesamt)*100);
$PerGruppeE = ceil(($GruppeE/$Gesamt)*100);
$PerGruppeF = ceil(($GruppeF/$Gesamt)*100);
$PerGruppeG = ceil(($GruppeG/$Gesamt)*100);
$PerGruppeH = ceil(($GruppeH/$Gesamt)*100);
$DegGruppeA = ceil(($GruppeA/$Gesamt)*360);
$DegGruppeB = ceil(($GruppeB/$Gesamt)*360);
$DegGruppeC = ceil(($GruppeC/$Gesamt)*360);
$DegGruppeD = ceil(($GruppeD/$Gesamt)*360);
$DegGruppeE = ceil(($GruppeE/$Gesamt)*360);
$DegGruppeF = ceil(($GruppeF/$Gesamt)*360);
$DegGruppeG = ceil(($GruppeG/$Gesamt)*360);
$DegGruppeH = ceil(($GruppeH/$Gesamt)*360);
// create a 401*401 image
$img = imagecreatetruecolor(601, 601);
// allocate some colors
$black = imagecolorallocate($img, 0, 0, 0);
$red = imagecolorallocate($img, 255, 0, 0);
$green = imagecolorallocate($img, 0, 255, 0);
$blue = imagecolorallocate($img, 0, 0, 255);
$white = imagecolorallocate($img, 255, 255, 255);
$yellow = imagecolorallocate($img, 255, 255, 0);
$MainBGColorHex = imagecolorallocate($img, hexdec($MainBGColor[1].$MainBGColor[2]), hexdec($MainBGColor[3].$MainBGColor[4]), hexdec($MainBGColor[5].$MainBGColor[6]));
$MainBGColorHex = imagecolorallocate($img, 170, 221, 255);
// draw the background rectangle
imagefilledrectangle($img,0,0,601,601,$MainBGColorHex);
$pointer = 0;
// draw an arc of x degrees length
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeA, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeA, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
//Beschriftung("A",$pointer,$pointer+$DegGruppeA);
$pointer = $pointer+$DegGruppeA;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeB, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeB, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeB;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeC, $yellow,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeC, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeC;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeD, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeD, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeD;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeE, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeE, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeE;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeF, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeF, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeF;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeG, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeG, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeG;
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeH, $blue,IMG_ARC_PIE);
imagefilledarc($img, 300, 300, 400, 400, $pointer, $pointer+$DegGruppeH, $black,IMG_ARC_EDGED|IMG_ARC_NOFILL);
$pointer = $pointer+$DegGruppeH;
// draw the circle for the cake graphic (draw this last for best results)
imagearc($img, 300, 300, 400, 400, 0, 360, $black);
/*
Winkelfunktionen, länge 200, prozent*3.6 = gradanzahl, pixel für endpunkt der linie????
*/
// output image in the browser
header("Content-type: image/png");
imagepng($img);
// free memory
imagedestroy($img);
?>
GruppeA bis GruppeH enthalten die Werte, zusammen ergeben sie 'Gesamt'.
Könnt ihr mir da evtl. weiterhelfen?
Danke schonmal!
mf_2