php繪製3D圓形圖類函數

來源:互聯網
上載者:User
關鍵字 網路程式設計 PHP教程

下面關於php教程 3D圓形圖類繪製類函數實現原理是根據//橢圓長半軸 等參數繪製一個3D圓形圖形的代碼。

class chart{

var $a; 橢圓長半軸
var $b; 橢圓短半軸
var $DataArray;  每個扇形的資料
var $ColorArray; 每個扇形的顏色 要求按照十六進位書寫但前面不加0x
為邊緣及陰影為黑色

function chart($pa=100,$pb=60,$sData="100,200,300,400,500,300", $sColor="ee00ff,dd0000,cccccc,ccff00,00ccff, ccff00")
{
$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;$i<$DataNumber;$i++)      $DataTotal+=$this->DataArray[$i]; 算出資料和

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

    /*


    ** 畫每一個扇形


    */


$Degrees = 0;


    for($i = 0; $i &lt; $DataNumber; $i++){


        $StartDegrees = round($Degrees);


        $Degrees += (($this-&gt;DataArray[$i]/$DataTotal)*360);


        $EndDegrees = round($Degrees);


        $percent = number_format($this-&gt;DataArray[$i]/$DataTotal*100, 1); 


        list($R,$G,$B)=getRGB(hexdec($this-&gt;ColorArray[$i]));


        $CurrentColor=imagecolorallocate($image,$R,$G,$B);


        if ($R&gt;60 and $R&lt;256)            $R=$R-60;


if ($G&gt;60 and $G&lt;256)            $G=$G-60;


        if ($B&gt;60 and $B&lt;256)            $B=$B-60;


        $CurrentDarkColor=imagecolorallocate($image,$R,$G,$B);


        //畫扇形弧


        imagearc($image,$PieCenterX,$PieCenterY,$DoubleA,$DoubleB,$StartDegrees,$EndDegrees,$CurrentColor);


        //畫直線


        list($ArcX, $ArcY) = pie_point($StartDegrees , $this-&gt;a , $this-&gt;b);


imageline($image,$PieCenterX,$PieCenterY,floor($PieCenterX + $ArcX),floor($PieCenterY + $ArcY),$CurrentColor);


        //畫直線


        list($ArcX, $ArcY) = pie_point($EndDegrees,$this-&gt;a , $this-&gt;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-&gt;a*3/4 , $this-&gt;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<=180){
           if ($EndDegrees<=180) {    
                for($k = 1; $k < 15; $k++)
                 imagearc($image,$PieCenterX, $PieCenterY+$k,$DoubleA, $DoubleB, $StartDegrees, $EndDegrees, $ CurrentDarkColor);
           }else{
                for($k = 1; $k < 15; $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 chart();
$objp->DrawPie();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.