|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
本文主要阐述如何在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源代码! 下一教程: 怎么样可以把 phpinfo()屏蔽掉? 您可以阅读与"PHP绘图对象结构设计与应用实例"相关的教程: · PHP绘图对象结构设计与应用实例 · PHP教程.应用实例11 · PHP教程.应用实例10 · PHP教程.应用实例12 · PHP教程.应用实例2 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |