<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      3維餅圖

      [摘要]一直想發表點東西。最近剛把php4中的php_gd.dll搞定,就迫不及待的想做點圖形程序玩玩?吹接性S多php做餅圖的例子,看了一下都是2維的,于是就想做個3維的。經過努力pie3d完成了,好東西...
      一直想發表點東西。最近剛把php4中的php_gd.dll搞定,就迫不及待的想做點圖形程序玩玩?吹接性S多php做餅圖的例子,看了一下都是2維的,于是就想做個3維的。經過努力pie3d完成了,好東西與大家分享。不過小弟是php新手,代碼可能不夠精煉,希望大家指教共同來完善這個程序。記得通知我(estorm@yeah.net)

      +------------------------+
      pie3dfun.php//公用函數
      +------------------------+

      define("ANGLE_STEP",5);//定義畫橢圓弧時的角度步長
      function chx_getdarkcolor($img,$clr){//求$clr對應的暗色
      $rgb=imagecolorsforindex($img,$clr);
      return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
      }

      function chx_getexy($a,$b,$d){//求角度$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){//橢圓弧函數
      $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){//畫扇面
      $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扇面
      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轉索引色
      $R=($clr>>16) & 0xff;
      $G=($clr>>8)& 0xff;
      $B=($clr) & 0xff;
      return imagecolorallocate($img,$R,$G,$B);
      }

      ?>

      +--------------------------+
      pie3d.php //三維餅圖文件
      +--------------------------+

      require("pie3dfun.php");

      $a=150;//橢圓長半軸
      $b=50;//橢圓段半軸
      $v=20;//圓餅高度
      $font=5;//字體

      $ox=5+$a;
      $oy=5+$b;
      $fw=imagefontwidth($font);
      $fh=imagefontheight($font);


      $datLst=array(30,10,20,20,10,20,10,20);//數據
      $labLst=array("a1","a2","a3","a4","a5","a6","a7","a8");//標簽
      $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為索引色
      for($i=0;$i
      $clrbk=imagecolorallocate($img,0xff,0xff,0xff);
      $clrt=imagecolorallocate($img,0x00,0x00,0x00);
      //填充背景色
      imagefill($img,0,0,$clrbk);
      //求和
      $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;
      //畫圓餅
      chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd,$ed,$clrLst[$i]);
      //畫標簽
      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;
      }
      //輸出圖形
      header("Content-type:image/gif");
      imagegif($img);

      ?>



      標簽:3維餅圖 
      日韩精品一区二区三区高清