Home > Backend Development > PHP Tutorial > PHP对象编程实现3D饼图_PHP

PHP对象编程实现3D饼图_PHP

WBOY
Release: 2016-06-01 12:28:54
Original
795 people have browsed it

//公用函数

//把角度转换为弧度
function deg2Arc($degrees) {
return($degrees * (pi()/180.0));
}

//RGB
function getRGB($color){
$R=($color>>16) & 0xff;
$G=($color>>8) & 0xff;
$B=($color) & 0xff;
return (array($R,$G,$B));
}

// 取得在椭圆心为(0,0)的椭圆上 x,y点的值
function pie_point($deg,$va,$vb){
$x= cos(deg2Arc($deg)) * $va;
$y= sin(deg2Arc($deg)) * $vb;
return (array($x, $y));
}


//3D饼图类

class Pie3d{

var $a; //椭圆长半轴
var $b; //椭圆短半轴
var $DataArray; //每个扇形的数据
var $ColorArray; //每个扇形的颜色 要求按照十六进制书写但前面不加0x
//为边缘及阴影为黑色

function Pie3d($pa=100,$pb=60,$sData="100,200,300,400,500", $sColor="ee00ff,dd0000,cccccc,ccff00,00ccff")
{
$this->a=$pa;
$this->b=$pb;
$this->DataArray=split(",",$sData);
$this->ColorArray=split(",",$sColor);
}

function setA($v){
$this->a=$v;
}

function getA(){
return $this->a;
}

function setB($v){
$this->b=$v;
}

function getB(){
return $this->b;
}

function setDataArray($v){
$this->DataArray=split(",",$v);
}

function getDataArray($v){
return $this->DataArray;
}

function setColorArray($v){
$this->ColorArray=split(",",$v);
}

function getColorArray(){
return $this->ColorArray;
}


function DrawPie(){
$image=imagecreate($this->a*2 40,$this->b*2 40);
$PieCenterX=$this->a 10;
$PieCenterY=$this->b 10;
$DoubleA=$this->a*2;
$DoubleB=$this->b*2;
list($R,$G,$B)=getRGB(0);
$colorBorder=imagecolorallocate($image,$R,$G,$B);
$DataNumber=count($this->DataArray);

//$DataTotal
for($i=0;$iDataArray[$i]; //算出数据和

//填充背境
imagefill($image, 0, 0, imagecolorallocate($image, 0xFF, 0xFF, 0xFF));

/*
** 画每一个扇形
*/
$Degrees = 0;
for($i = 0; $i $StartDegrees = round($Degrees);
$Degrees = (($this->DataArray[$i]/$DataTotal)*360);
$EndDegrees = round($Degrees);
$percent = number_format($this->DataArray[$i]/$DataTotal*100, 1);
list($R,$G,$B)=getRGB(hexdec($this->ColorArray[$i]));
$CurrentColor=imagecolorallocate($image,$R,$G,$B);
if ($R>60 and $R if ($G>60 and $G if ($B>60 and $B $CurrentDarkColor=imagecolorallocate($image,$R,$G,$B);
//画扇形弧
imagearc($image,$PieCenterX,$PieCenterY,$DoubleA,$DoubleB,$StartDegrees,$EndDegrees,$CurrentColor);
//画直线
list($ArcX, $ArcY) = pie_point($StartDegrees , $this->a , $this->b);
imageline($image,$PieCenterX,$PieCenterY,floor($PieCenterX $ArcX),floor($PieCenterY $ArcY),$CurrentColor);
//画直线
list($ArcX, $ArcY) = pie_point($EndDegrees,$this->a , $this->b);
imageline($image,$PieCenterX,$PieCenterY,ceil($PieCenterX $ArcX),ceil($PieCenterY $ArcY),$CurrentColor);
//填充扇形
$MidPoint = round((($EndDegrees - $StartDegrees)/2) $StartDegrees);
list($ArcX, $ArcY) = Pie_point($MidPoint, $this->a*3/4 , $this->b*3/4);

imagefilltoborder($image,floor($PieCenterX $ArcX),floor($PieCenterY $ArcY), $CurrentColor,$CurrentColor);
imagestring($image,2,floor($PieCenterX $ArcX-5),floor($PieCenterY $ArcY-5),$percent."%",$colorBorder);

//画阴影
if ($StartDegrees>=0 and $StartDegrees if($EndDegrees for($k = 1; $k imagearc($image,$PieCenterX, $PieCenterY $k,$DoubleA, $DoubleB, $StartDegrees, $EndDegrees, $CurrentDarkColor);
}else{
for($k = 1; $k imagearc($image,$PieCenterX, $PieCenterY $k,$DoubleA, $DoubleB, $StartDegrees, 180, $CurrentDarkColor);
}

}
}

/*到此脚本已经生了一幅图像了
**现在需要的是把它发到浏览器上,重要的一点是要将标头发给浏览器,让它知道是一个GIF文件。不然的话你只能看到一堆奇怪的乱码
*/
//输出生成的图片
header("Content-type: image/gif");
imagegif($image);
imagedestroy($image);
}//End drawPie()
}//End class


//实现

$objp = new Pie3d();
$objp->DrawPie();
?>

【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template