社区
基础编程
帖子详情
在画立体柱形图时遇到的问题?
tjyihui
2003-10-20 04:12:56
以前画二维平面柱形图时只要动态设定好柱形图的高度就可以了,但是在画立体柱形图时,因为要涉及到长方体的3个可见面,而变得很复杂,请问该如何画呢?
...全文
115
5
打赏
收藏
在画立体柱形图时遇到的问题?
以前画二维平面柱形图时只要动态设定好柱形图的高度就可以了,但是在画立体柱形图时,因为要涉及到长方体的3个可见面,而变得很复杂,请问该如何画呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liyujie2000
2003-10-21
打赏
举报
回复
好东西,收藏一下,
tjyihui
2003-10-21
打赏
举报
回复
老大们
你们的代码怎么一点注释都没有呀
xuzuning
2003-10-21
打赏
举报
回复
<?
/**
函数 Bar3d 用于绘制3三维条形图
使用世界坐标系,即原点在左下角。函数中做了WC-DC的转换
*/
function getRGB($color){
$R=($color>>16) & 0xff;
$G=($color>>8) & 0xff;
$B=($color) & 0xff;
return (array($R,$G,$B));
}
function setColor(&$im,$color) {
list($R,$G,$B) = getRGB($color);
return imagecolorallocate($im,$R,$G,$B);
}
function Bar3d(&$image,$x,$y,$w,$h,$z,$color=0xffffff,$angle=45) {
$dw = ceil($z*sin(deg2rad($angle)));
$dh = ceil($z*cos(deg2rad($angle)));
$im = imagecreate($w+abs($dw),$h+abs($dh));
$mx = imagesx($im);
$my = imagesy($im);
list($R,$G,$B) = getRGB($color);
$bg = imagecolorallocate($im,256-$R,256-$G,256-$B);
imagecolortransparent($im,$bg);
$a = array(0,$my, $w,$my, $w+$dw,$my-$dh, $dw,$my-$dh);
for($i=0;$i<8;$i+=2) {
$b[] = $a[$i];
$b[] = $a[$i+1]-$h;
}
if($dw < 0)
for($i=0;$i<8;$i+=2) {
$a[$i] -= $dw;
$b[$i] -= $dw;
}
if($dh < 0)
for($i=1;$i<8;$i+=2) {
$a[$i] += $dh;
$b[$i] += $dh;
}
$k = 0.8;
if($dh > 0)
imagefilledPolygon($im,$b,4,imagecolorallocate($im,$R*$k,$G*$k,$B*$k));
else
imagefilledPolygon($im,$a,4,imagecolorallocate($im,$R*$k,$G*$k,$B*$k));
if($dw > 0)
imagefilledPolygon($im,array($a[2],$a[3],$b[2],$b[3],$b[4],$b[5],$a[4],$a[5]),4,imagecolorallocate($im,$R/2,$G/2,$B/2));
else
imagefilledPolygon($im,array($a[6],$a[7],$b[6],$b[7],$b[0],$b[1],$a[0],$a[1]),4,imagecolorallocate($im,$R/2,$G/2,$B/2));
imagefilledPolygon($im,array($a[0],$a[1],$b[0],$b[1],$b[2],$b[3],$a[2],$a[3]),4,imagecolorallocate($im,$R,$G,$B));
imagecopyresized($image,$im,$x,imagesy($image)-$y-$my,0,0,$mx,$my,$mx,$my);
return $image;
}
/*** 测试例 ***/
$im = imagecreate(200,200);
setColor($im,0xefefef);
$color = array(0xff0000,0x00ff00,0x0000ff,0xffff00);
$data = array(
array(40,30,75,40),
array(20,40,30,10),
array(10,20,30,20)
);
foreach($data as $v) {
$m[] = max($v);
$cell[] = count($v);
}
$m = max($m);
$cell = max($cell);
$x = 10;
$y = 10;
$z = 10;
$kx = floor(floor((imagesx($im)-3*$x)/count($data))/$cell);
$ky = (imagesy($im)-3*$y)/$m;
foreach($data as $v) {
foreach($v as $i=>$d) {
Bar3d($im,$x,$y,$kx,$d*$ky,$z,$color[$i]);
$x += $kx;
}
$x = ceil($x+4);
}
header("Content-type: image/gif");
imagepng($im);
imagedestroy($im);
?>
skystar008
2003-10-20
打赏
举报
回复
这是画平面扇面的函数
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);
}
skystar008
2003-10-20
打赏
举报
回复
这是一个画3D扇面的函数.
function chx_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr)
{
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);
}
}
PowerBI系列之视觉对象专题
簇状
柱形图
100% Stacked bar chart 百分比堆积条形图 100% Stacked column chart 百分比堆积
柱形图
Line Chart 折线图-预测功能 Area Chart 面积图 Stacked Area Chart 堆积面积图 Line and ...
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章