php 三维饼图的实现代码


Posted in PHP onSeptember 28, 2008

经过努力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);
?>

PHP 相关文章推荐
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php动态绑定变量的用法
Jun 16 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
基于laravel where的高级使用方法
Oct 10 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 PHP
PHP控制网页过期时间的代码
Sep 28 #PHP
PHP集成FCK的函数代码
Sep 27 #PHP
php横向重复区域显示二法
Sep 25 #PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 #PHP
PHP伪造referer实例代码
Sep 20 #PHP
PHP面向对象分析设计的经验原则
Sep 20 #PHP
php 301转向实现代码
Sep 18 #PHP
You might like
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
对于Form表单reset方法的新认识
2014/03/05 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
JavaScript实现三级联动效果
2017/07/15 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
Python编写一个闹钟功能
2017/07/11 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
学校经典推荐信
2013/10/30 职场文书
公司办公室岗位职责
2014/03/19 职场文书
家长建议怎么写
2014/05/15 职场文书
员工生日活动方案
2014/08/24 职场文书
服务员态度差检讨书
2014/10/28 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书