国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

php 3D餅圖類繪制類函數(shù)

2024-09-04 11:44:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

下面關(guān)于php 3D餅圖類繪制類函數(shù)實(shí)現(xiàn)原理是根據(jù)//橢圓長(zhǎng)半軸等參數(shù)繪制一個(gè)3D餅圖形的代碼,代碼如下:

  1. class chart{ 
  2.  
  3. var $a//橢圓長(zhǎng)半軸  
  4. var $b//橢圓短半軸  
  5. var $DataArray;  //每個(gè)扇形的數(shù)據(jù)  
  6. var $ColorArray//每個(gè)扇形的顏色 要求按照十六進(jìn)制書(shū)寫但前面不加0x  
  7. //為邊緣及陰影為黑色 
  8.  
  9. function chart($pa=100,$pb=60,$sData="100,200,300,400,500,300"$sColor="ee00ff,dd0000,cccccc,ccff00,00ccff,ccff00")  
  10. {  
  11.     $this->a=$pa;  
  12.     $this->b=$pb;  
  13.     $this->DataArray=split(",",$sData);  
  14.     $this->ColorArray=split(",",$sColor);  
  15.  
  16. function setA($v){  
  17.     $this->a=$v;  
  18.  
  19. function getA(){  
  20.     return $this->a;  
  21.  
  22. function setB($v){  
  23.     $this->b=$v;   
  24.  
  25. function getB(){  
  26.     return $this->b;  
  27.  
  28. function setDataArray($v){  
  29.     $this->DataArray=split(",",$v);  
  30.  
  31. function getDataArray($v){  
  32.     return $this->DataArray;  
  33.  
  34. function setColorArray($v){  
  35.     $this->ColorArray=split(",",$v);  
  36.  
  37. function getColorArray(){  
  38.     return  $this->ColorArray;  
  39.  
  40.    
  41. function  DrawPie(){  
  42.     $image=imagecreate($this->a*2+40,$this->b*2+40);  
  43.     $PieCenterX=$this->a+10;  
  44.     $PieCenterY=$this->b+10;  
  45.     $DoubleA=$this->a*2;  
  46.     $DoubleB=$this->b*2;  
  47.     list($R,$G,$B)=getRGB(0);  
  48.     $colorBorder=imagecolorallocate($image,$R,$G,$B);  
  49.     $DataNumber=count($this->DataArray);  
  50.       
  51.     //$DataTotal  
  52.     for($i=0;$i<$DataNumber;$i++)      $DataTotal+=$this->DataArray[$i]; //算出數(shù)據(jù)和  
  53.       
  54.     //填充背境  
  55.     imagefill($image, 0, 0, imagecolorallocate($image, 0xFF, 0xFF, 0xFF)); 
  56.  
  57.     /*  
  58.     ** 畫(huà)每一個(gè)扇形  
  59.     */  
  60.     $Degrees = 0;  
  61.     for($i = 0; $i < $DataNumber$i++){  
  62.         $StartDegrees = round($Degrees);  
  63.         $Degrees += (($this->DataArray[$i]/$DataTotal)*360);  
  64.         $EndDegrees = round($Degrees);  
  65.         $percent = number_format($this->DataArray[$i]/$DataTotal*100, 1);   
  66.         list($R,$G,$B)=getRGB(hexdec($this->ColorArray[$i]));  
  67.         $CurrentColor=imagecolorallocate($image,$R,$G,$B);  
  68.         if ($R>60 and $R<256)            $R=$R-60;  
  69.         if ($G>60 and $G<256)            $G=$G-60;  
  70.         if ($B>60 and $B<256)            $B=$B-60;  
  71.         $CurrentDarkColor=imagecolorallocate($image,$R,$G,$B);  
  72.         //畫(huà)扇形弧  
  73.         imagearc($image,$PieCenterX,$PieCenterY,$DoubleA,$DoubleB,$StartDegrees,$EndDegrees,$CurrentColor);  
  74.         //畫(huà)直線  
  75.         list($ArcX$ArcY) = pie_point($StartDegrees , $this->a , $this->b);  
  76.         imageline($image,$PieCenterX,$PieCenterY,floor($PieCenterX + $ArcX),floor($PieCenterY + $ArcY),$CurrentColor);  
  77.         //畫(huà)直線  
  78.         list($ArcX$ArcY) = pie_point($EndDegrees,$this->a , $this->b);  
  79.         imageline($image,$PieCenterX,$PieCenterY,ceil($PieCenterX + $ArcX),ceil($PieCenterY + $ArcY),$CurrentColor);  
  80.         //填充扇形  
  81.         $MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees);  
  82.         list($ArcX$ArcY) = Pie_point($MidPoint$this->a*3/4 , $this->b*3/4);  
  83.           
  84.         imagefilltoborder($image,floor($PieCenterX + $ArcX),floor($PieCenterY + $ArcY), $CurrentColor,$CurrentColor);  
  85.         imagestring($image,2,floor($PieCenterX + $ArcX-5),floor($PieCenterY + $ArcY-5),$percent."%",$colorBorder); 
  86.  
  87.         //畫(huà)陰影  
  88.         if ($StartDegrees>=0 and $StartDegrees<=180){  
  89.            if($EndDegrees<=180){      
  90.                for($k = 1; $k < 15; $k++)  
  91.                 imagearc($image,$PieCenterX$PieCenterY+$k,$DoubleA$DoubleB$StartDegrees$EndDegrees$CurrentDarkColor);  
  92.            }else{  
  93.                for($k = 1; $k < 15; $k++)  
  94.                 imagearc($image,$PieCenterX$PieCenterY+$k,$DoubleA$DoubleB$StartDegrees, 180, $CurrentDarkColor);  
  95.            } 
  96.  
  97.         }  
  98.    }  
  99.           
  100.     /*到此腳本已經(jīng)生了一幅圖像了  
  101.     **現(xiàn)在需要的是把它發(fā)到瀏覽器上,重要的一點(diǎn)是要將標(biāo)頭發(fā)給瀏覽器,讓它知道是一個(gè)GIF文件。不然的話你只能看到一堆奇怪的亂碼  
  102.     */   
  103.     //輸出生成的圖片      
  104.     header("Content-type: image/gif");  
  105.     imagegif($image);  
  106.     imagedestroy($image);  
  107. }//End drawPie()  
  108. }//End class 
  109. //開(kāi)源代碼Vevb.com 
  110. //實(shí)現(xiàn) 
  111. $objp = new chart();  
  112. $objp->DrawPie(); 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴青县| 宜良县| 南平市| 盐城市| 晋江市| 定远县| 介休市| 卓尼县| 蓬安县| 长丰县| 台湾省| 麻栗坡县| 金乡县| 泉州市| 郧西县| 特克斯县| 龙口市| 筠连县| 米易县| 吉林省| 平顶山市| 自治县| 贵德县| 贡嘎县| 远安县| 晋城| 疏附县| 临潭县| 光泽县| 双江| 塔城市| 准格尔旗| 崇礼县| 汉川市| 渭南市| 法库县| 武平县| 呼玛县| 青阳县| 新化县| 濮阳县|