仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1616|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之PHP画图对象布局设计与使用实例

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:26:54 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
告诉你了一个方式,但是缺少努力这一环节,那也是白搭。对象|设计|使用实例   本文次要论述若何在PHP中完成画图对象的布局设计。

在PHP中小型的数据布局可由复杂类来完成,即由复杂的数据和操作来界说。但跟着数据布局的庞杂化,复杂类不克不及知足完全表现全部数据布局的需求,由此需求利用类的布局,一句话来描写就是类中的成员也由类来组成。这是面向对象设计办法完成对数据封装、信息埋没及代码重用的扩大体例,而另外一种体例就是类的承继。
本文次要会商类的布局。

以画图为例,咱们来看关于几何图形的复杂例子。
几何图形包括一系列的点,线,面等,而由一些几何正义可知点是个中最根基的组成元素。所以,咱们以点作为设计的根基对象,由此来描写线和面临象。用来举例申明类布局的完成体例。

剖析
假定点位于某一立体内,在肯定了坐标系以后(即给定了原点和坐标轴及其正偏向),咱们即可以用坐标地位来描写这个点,如图:

直线是由两点来肯定的,所以由肇端和终止两点即可肯定一条线段。如图:

面 ――(无妨举例)矩形,由两条平行对边组成,且相邻双方夹角为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手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。
深爱那片海 该用户已被删除
沙发
 楼主| 发表于 2015-2-4 13:08:58 | 显示全部楼层
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-21 17:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表