Ich wollte schon immer etwas veröffentlichen. Ich habe kürzlich php_gd.dll in PHP4 fertiggestellt und kann es kaum erwarten, einige Grafikprogramme zum Spielen zu erstellen. Ich habe viele Beispiele für die Erstellung von Kreisdiagrammen in PHP gesehen und nachdem ich sie mir angesehen hatte, waren sie alle zweidimensional, also wollte ich ein dreidimensionales Diagramm erstellen. Nach harter Arbeit ist pie3d fertiggestellt und die guten Sachen werden mit allen geteilt. Ich bin jedoch neu in PHP und der Code ist möglicherweise nicht ausreichend verfeinert. Ich hoffe, dass mir jeder einen Rat geben und zusammenarbeiten kann, um dieses Programm zu verbessern. Denken Sie daran, mich zu benachrichtigen ( [email protected] )
+------------------------+
|. pie3dfun.php//Öffentliche Funktionen|
+----------+
define("ANGLE_STEP",5);//Definieren Sie den Winkelschritt beim Zeichnen eines elliptischen Bogens
Funktion chx_getdarkcolor($img,$clr){//Finden Sie die dunkle Farbe, die $clr entspricht
$rgb=imagecolorsforindex($img,$clr);
return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
}
function chx_getexy($a,$b,$d){//Finden Sie die Punktkoordinaten auf der Ellipse, die dem Winkel $d entsprechen
$d=deg2rad($d);
return array(round($a*Cos($d)),round($b*Sin($d)));
}
function chx_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr){//Elliptische Bogenfunktion
$n=ceil(($ed-$sd)/ANGLE_STEP);
$d=$sd;
list($x0,$y0)=chx_getexy($a,$b,$d);
for($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x,$y)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$x0=$x;
$y0=$y;
}
}
function chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr){//Zeichne einen Sektor
$n=ceil(($ed-$sd)/ANGLE_STEP);
$d=$sd;
list($x0,$y0)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);
for($i=0;$i<$n;$i++){
$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x,$y)=chx_getexy($a,$b,$d);
imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$x0=$x;
$y0=$y;
}
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);
list($x,$y)=chx_getexy($a/2,$b/2,($d+$sd)/2);
imagefill($img,$x+$ox,$y+$oy,$clr);
}
Funktion chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr){//3d-Sektor
chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr);
if($sd<180){
list($R,$G,$B)=chx_getdarkcolor($img,$clr);
$clr=imagecolorallocate($img,$R,$G,$B);
if($ed>180) $ed=180;
list($sx,$sy)=chx_getexy($a,$b,$sd);
$sx+=$ox;
$sy+=$oy;
list($ex,$ey)=chx_getexy($a,$b,$ed);
$ex+=$ox;
$ey+=$oy;
imageline($img,$sx,$sy,$sx,$sy+$v,$clr);
imageline($img,$ex,$ey,$ex,$ey+$v,$clr);
chx_arc($img,$ox,$oy+$v,$a,$b,$sd,$ed,$clr);
list($sx,$sy)=chx_getexy($a,$b,($sd+$ed)/2);
$sy+=$oy+$v/2;
$sx+=$ox;
imagefill($img,$sx,$sy,$clr);
}
}
Funktion chx_getindexcolor($img,$clr){//RBG, um die Farbe zu indizieren
$R=($clr>>16) & 0xff;
$G=($clr>>8)& 0xff;
$B=($clr) & 0xff;
return imagecolorallocate($img,$R,$G,$B);
}
?>
+------------+
|. pie3d.php //Dreidimensionale Kreisdiagrammdatei |
+-----------+
require("pie3dfun.php");
$a=150;//Haupthalbachse der Ellipse
$b=50;//Halbachse des Ellipsensegments
$v=20;//Höhe des runden Kuchens
$font=5;//Schriftart
$ox=5+$a;
$oy=5+$b;
$fw=imagefontwidth($font);
$fh=imagefontheight($font);
$datLst=array(30,10,20,20,10,20,10,20);//data
$labLst=array("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8");//label
$clrLst=array(0x99ff00,0xff6666,0x0099ff,0xff99ff,0xffff99,0x99ffff,0xff3333,0x009999);
$w=10+$a*2;
$h=10+$b*2+$v+($fh+2)*count($datLst);
$img=imagecreate($w,$h);
//RGB in Indexfarbe konvertieren
for($i=0;$i
$clrbk=imagecolorallocate($img,0xff,0xff,0xff);
$clrt=imagecolorallocate($img,0x00,0x00,0x00);
//Hintergrundfarbe füllen
imagefill($img,0,0,$clrbk);
//Summe
$tot=0;
for($i=0;$i
$sd=0;
$ed=0;
$ly=10+$b*2+$v;
for($i=0;$i $sd=$ed;
$ed+=$datLst[$i]/$tot*360;
//Zeichne einen runden Kuchen
chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd,$ed,$clrLst[$i]);
//Etiketten zeichnen
imagefilledrectangle($img,5,$ly,5+$fw,$ly+$fh,$clrLst[$i]);
imagerectangle($img,5,$ly,5+$fw,$ly+$fh,$clrt);
imagestring($img,$font,5+2*$fw,$ly,
$labLst[$i].::.$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)",
$clrt);
$ly+=$fh+2;
}
//Grafiken ausgeben
header("Content-type:image/gif");
imagegif($img);
?>