Home  >  Article  >  Backend Development  >  PHP three-dimensional pie chart implementation code_PHP tutorial

PHP three-dimensional pie chart implementation code_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:49:36861browse

After hard work, pie3d is completed, and the good stuff is shared with everyone. However, I am new to PHP and the code may not be refined enough. I hope everyone can give me some advice and work together to improve this program. Remember to notify me (estorm@yeah.net)
+---------------------+
| pie3dfun.php//Public functions |
+------------------------+
define("ANGLE_STEP",5);//Define when drawing an elliptical arc Angle step
function chx_getdarkcolor($img,$clr){//Find the dark color corresponding to $clr
$rgb=imagecolorsforindex($img,$clr);
return array($rgb["red "]/2,$rgb["green"]/2,$rgb["blue"]/2);
}
function chx_getexy($a,$b,$d){//Find the angle Point coordinates on the ellipse corresponding to $d
$d=deg2rad($d);
return array(round($a*Cos($d)),round($b*Sin($d)) );
}
function chx_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr){//Elliptic arc function
$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){//Drawing fan
$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);
}
function chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr){//3d sector
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);
}
}
function chx_getindexcolor($img,$clr){/ /RBG to index color
$R=($clr>>16) & 0xff;
$G=($clr>>8)& 0xff;
$B=($clr) & 0xff;
return imagecolorallocate($img,$R,$G,$B);
}
?>
+--------------- ----------+
| pie3d.php //Three-dimensional pie chart file|
+-------------------- ------+
require("pie3dfun.php");
$a=150;//Ellipse semi-major axis
$b=50;//Ellipse segment semi-axis
$v=20;//Height of round cake
$font=5;//Font
$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");//Tag
$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);
//Convert RGB to index color
for($i=0;$i
$clrbk =imagecolorallocate($img,0xff,0xff,0xff);
$clrt=imagecolorallocate($img,0x00,0x00,0x00);
//Fill the background color
imagefill($img,0,0 ,$clrbk);
//Sum
$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;
//Draw a round cake
chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd, $ed,$clrLst[$i]);
//Draw label
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;
}
//Output graphics
header("Content-type:image/gif");
imagegif($img );
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/319534.htmlTechArticleAfter hard work, pie3d is completed, and the good stuff is shared with everyone. However, I am new to PHP and the code may not be refined enough. I hope everyone can give me some advice and work together to improve this program. Remember to notify me (estor...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn