社区
基础编程
帖子详情
在画立体柱形图时遇到的问题?
tjyihui
2003-10-20 04:12:56
以前画二维平面柱形图时只要动态设定好柱形图的高度就可以了,但是在画立体柱形图时,因为要涉及到长方体的3个可见面,而变得很复杂,请问该如何画呢?
...全文
110
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);
}
}
纯CSS3实现柱状图的3D
立体
动
画
效果
今天这篇文章所实现的动
画
效果起源于一个小小的想法,这个想法来自于另一个网站的一篇文章,它介绍了如何在网页中使用CSS、图片和JavaScript创建
立体
的柱状图。在阅读了那篇文章之后,我想挑战一下,尝试使用纯CSS来实现相同的效果。一开始的难点在于创建一个六面半透明的立方体,而后面的难点在于如何创建一个完整的带有动
画
效果的3D柱状图。 下面,我们就一起来看一下如何解决这些难点。 让我们先列举一些要实现的要求,我们所实现的柱状图应该是: 背景独立(即柱状图与背景互不影响) 自适应的(柱子数量的多少不会影响.
用Matplotlib在PyQt5界面绘制动态曲线、柱形、二维、三维图(上)
文章目录前言1、准备PyQt界面2、定义
画
板3、添加
画
板4、
画
图 前言 使用PyQt设计程序界面过程中不可避免地需要将数据通过图形化的方式显示出来,对于一些实
时
性较强的系统,还需要能够动态地更新这些图形。然而Matplotlab对于曲线图、
柱形图
、二维图、三维图的绘制和更新各有不同的方法。 我在工作中就
遇到
了这个
问题
,花了不少精力汇总了使用Matplotlib实现曲线、
柱形图
、二维图以及三维图...
一秒钟教会你如何 使用jfreechart制作图表,扇形图,
柱形图
,线型图,
时
序图,附上详细代码,直接看效果...
今天有小伙伴问到我怎么使用jfreeChat生成图标,去年就有一个这方便的的总结,今天再
遇到
,就总结出来,供大家参考: 第一个: 创建柱状图,效果图如下: 柱状图代码如下: package cn.xfz.image; import java.awt.Color; import java.awt.Font; import org.jfree.chart.Ch...
Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、
柱形图
、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
Matplotlib可视化数据分析图表
echarts制作图表同
时
有3d柱状图与折线图
echarts制作图表同
时
有3d柱状图与折线图工作
遇到
,小可爱们可直接抄作业,使用的pictorialBar 工作
遇到
,小可爱们可直接抄作业,使用的pictorialBar echarts封装,使用了mixin(这个方式向大佬取经获得),下面是目录结构 在main.js引入 index.js代码 import * as echarts from "echarts"; // 引入echarts import Vue from "vue" Vue.prototype.$echarts = e
基础编程
21,882
社区成员
140,366
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章