ホームページ  >  記事  >  バックエンド開発  >  PHP 3 次元円グラフの実装コード_PHP チュートリアル

PHP 3 次元円グラフの実装コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:49:36861ブラウズ

苦労の末、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))); oy,$a,$b ,$sd,$ed,$clr){//楕円弧関数
$n=ceil(($ed-$sd)/ANGLE_STEP);
$d=$sd; $x0,$y0)= chx_getexy($a,$b,$d);
for($i=0;$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;
}
}
関数 chx_sector($img,$ox,$oy,$a,$b) ,$sd,$ed, $clr){// ファンを描画します
$n=ceil(($ed-$sd)/ANGLE_STEP)
list($x0,$y0); chx_getexy($a,$b, $d);
imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr); n;$i++){
$ d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x,$y)=chx_getexy($a,$b,$ d);
イメージライン($x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);
$y0=$y; imageline($img,$x0+$ ox,$y0+$oy,$ox,$oy,$clr);
list($x,$y)=chx_getexy($a/2,$b/2,($d+) $sd)/2);
imagefill($x+$ox,$y+$oy,$clr)
}
関数 chx_sector3d($a,$b,$v) ,$sd,$ed,$ clr){//3D セクター
chx_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr);
if($sdlist($R, $G,$B)=chx_getdarkcolor($img,$clr)
$clr=imagecolorallocate($img,$R,$G,$B); ) $ed=180;
リスト ($sx,$sy)=chx_getexy($a,$b,$sd);
$sy+=$oy; )=chx_getexy($a,$ b,$ed);
$ex+=$ox
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);
リスト ($sx,$sy)=chx_getexy($a,$b,($sd+$ed)/2);
$sy+=$oy+$v/2; ox;
imagefill($img, $sx,$sy,$clr);
}
}
function chx_getindexcolor($img,$clr){//RBG をインデックスカラーにします
$R=($clr>>16) ) & 0xff;
$G= ($clr>8)& 0xff;
imagecolorallocate($img,$R,$G,$B); ?>
+--- ------------+
| //三次元円グラフ ファイル| ------------------- ---------------+
require("pie3dfun.php");
$a=150 ;//楕円の長半軸
$b=50;//楕円セグメントの半軸
$v=20;//丸いケーキの高さ
$font=5;//フォント
$ox=5+$a ;
$oy=5+$b;
$fh =イメージフォント高さ($font); ,20);//data
$labLst=array("a1","a2","a3 ","a4","a5","a6","a7","a8");//タグ
$clrLst=array(0x99ff00,0xff6666,0x0099ff,0xff99ff,0xffff99,0x99ffff,0xff3333,0x009999);
$w=10+$a*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($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); *$fw,$ly,
$labLst[$i].":".$datLst[$i ]."(".(round(10000*($datLst[$i]/$tot))/100) ."%)",
$clrt);
$ly+=$fh+2;
/ /出力グラフィックス
header("Content-type:image/gif"); >



http://www.bkjia.com/PHPjc/319534.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/319534.html

技術記事

苦労の末、pie3d が完成し、出来上がったものはみんなで共有します。ただし、私は PHP を初めて使用するため、コードが十分に洗練されていない可能性があります。皆さんにアドバイスをいただき、このプログラムを改善するために協力していただければ幸いです。忘れずに通知してください (エスター...



)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。