帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > PHP编程
PHP绘图对象结构设计与应用实例
作者:久隆信息/王凯 发布时间:2005-03-11 来源:

点击查看原图
    直线是由两点来确定的,所以由起始和终止两点便可确定一条线段。如图:
点击查看原图
    面 ——(不妨举例)矩形,由两条平行对边构成,且相邻两边夹角为90度。绘图时发现,矩形可由对角的两点唯一确定。如图:
点击查看原图
    基于上述分析,我们开始设计:点类,线类,面类。线和面类中的数据成员包含点类,这就是类的结构,从而由简单类构成复杂类。
设计如下:
点击查看原图
    从另一个角度考虑,如果不采用类的结构设计方法,一个没有层次的类可能是这样的,以Line为例:
点击查看原图
    一个简单类,想法是:成员变量代表确定此线段的两个点的坐标(x1,y1),(x2,y2)。

    对比两种设计,Line_Bad带来的结果是维护和更改不便,因为没有层次。首先需要维护的成员变量多,四个;若需要设置线段中点的颜色,Line_Bad则需要增加成员函数;若需要将这直线改成三维空间的,Line_Bad则需要增加成员变量,然后修改所有的成员函数。而用Line类则避免了这样的麻烦,设置颜色只需调用Point的方法就可以完成;而改成三维空间,只需增加Point的属性(z坐标)就可以了。而Line类本身几乎不用做任何改动(与PHP的绘图函数有关),省了不少维护修改的力气吧 :)。 



    现在绘图的基础有了,我们就来举一个实际的应用例子。

    在许多统计中常需要用图例来显示各类统计结果,我们就用上面设计的绘图类来实现柱状图的显示。
点击查看原图
分析:
    柱状图主要由坐标轴和柱体构成。坐标轴可由Line类显示,柱体可由Rectangle类显示。

显示坐标轴如下:

function DrawAxes()
{
$vertspan=200;

$p1=new Point(10,$vertspan+2.5);
$p2=new Point(10,2.5);

$VerticalAxis=new Line($p1,$p2);
$VerticalAxis->Draw();

$p1=new Point(7.5,$vertspan);
$p2=new Point(370,$vertspan);

$HorizontalAxis=new Line($p1,$p2);
$HorizontalAxis->Draw();

}





显示柱体如下:
function Plot($arr_barTotal)
{
$vertspan=200;
//显示比例
$scaleHeight=190; 
//确定柱状中最大值
$maxTotal=Max1(&$arr_barTotal);
//确定柱体个数
$total=count($arr_barTotal);

//循环显示柱状体
$dx=15;
$x=10+$dx;

for($i=0;$i<$total;$i++)
{
$rectHeight=($arr_barTotal[$i]/$maxTotal)*$scaleHeight;

$p1=new Point($x,$vertspan-$rectHeight);
$p2=new Point($x+$dx,$vertspan);

$CurrRect= new Rectangle($p1,$p2);
$CurrRect->Draw();

$x+=2.0*$dx;

}


主程序:
1) 确定显示数据。
2) 显示坐标轴。
3) 显示柱状体。


//main 
$arr_barTotal=array('1','3','34','23','5','25','7'); //显示数据
DrawAxes(); //画坐标轴
Plot($arr_barTotal); //画柱状体 



这样主程序框架就完成了:D
效果如下。 
点击查看原图
如需进一步美化工作,大家可自行添加基础显示类中相应的属性及相应的成员函数,这里就不多述了。

附:因为篇幅问题,没有附上源码。
本文中所有代码可在http://10.31.172.7/cgi-bin/cvsweb.cgi/kai/graph/中获得,并已在php4.0.2+Gd1.62环境下调试通过。

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·Windows下集成安装Apache,PHP,MYSQ
·Mysql注入:SQL Injection with MyS
·PHP 的来龙去脉
·PHP 的功能概述
·PHP与其它CGI的比较
·PHP 的编译配置详细选项
·php.ini 配置详细选项
·如何写作PHP程序
·Hello,World
·嵌入方法
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统