PHP绘图对象结构设计与应用实例

2016-01-29 13:42 16 1 收藏

PHP绘图对象结构设计与应用实例,PHP绘图对象结构设计与应用实例

【 tulaoshi.com - PHP 】

本文主要阐述如何在PHP中实现绘图对象的结构设计。

在PHP中小型的数据结构可由简单类来实现,即由简单的数据和操作来定义。但随着数据结构的复杂化,简单类不能满足完整体现整个数据结构的需求,由此需要使用类的结构,一句话来描述就是类中的成员也由类来构成。这是面向对象设计方法实现对数据封装、信息隐藏及代码重用的扩展方式,而另一种方式就是类的继承。
本文主要讨论类的结构。

以绘图为例,我们来看关于几何图形的简单例子。
几何图形包含一系列的点,线,面等,而由一些几何公理可知点是其中最基本的构成元素。所以,我们以点作为设计的基本对象,由此来描述线和面对象。用来举例说明类结构的实现方式。

分析
假设点位于某一平面内,在确定了坐标系之后(即给定了原点和坐标轴及其正方向),我们便可以用坐标位置来描述这个点,如图:

点击查看原图

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)


直线是由两点来确定的,所以由起始和终止两点便可确定一条线段。如图:

点击查看原图


面 (不妨举例)矩形,由两条平行对边构成,且相邻两边夹角为90度。绘图时发现,矩形可由对角的两点唯一确定。如图:

点击查看原图


基于上述分析,我们开始设计:点类,线类,面类。线和面类中的数据成员包含点类,这就是类的结构,从而由简单类构成复杂类。
设计如下:

点击查看原图

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)


从另一个角度考虑,如果不采用类的结构设计方法,一个没有层次的类可能是这样的,以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); //画柱状体

来源:https://www.tulaoshi.com/n/20160129/1491225.html

延伸阅读
标签: PHP
一名新 PHP 数据对象 (PDO) 数据抽象层的原始开发人员为您简要介绍该抽象层,重点讲述与 Oracle 一起运行的情况。 需要 PHP:5.0 需要其他:Oracle 8 或更高版本客户端库 下载用于 Oracle 的 PDO (Windows):php_pdo.dll, php_pdo_oci.dll 下载用于 Oracle 的 PDO (Unix):pdo, pdo_oci 下载 示例代码 PDO 简介 PHP 主要...
标签: PHP
    个人认为在23个经典模式中VISITOR是比较难理解的一个,所以决定先讲讲自己对VISITOR的理解。因为马哲认为对事物的认识是从具体到抽象的一个过程,所以在谈理论之前先说一个例子是必要的。这个例子不是实际应用,但我想它还算生动,是个记忆VISITOR模式的好例子吧。     英国、美国都有自己的核武机...
BOOL CSomeApp::InitInstance() { Enable3dControls(); LoadStdProfileSettings(); AddDocTemplate(...) ...... ShowWindow(...); m_pMainWnd-DragAcceptFiles(); EnableShellOpen(); RegisterShellFileTypes(TRUE); CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo)) ...
在学习中遇到问题可以到 论坛 发贴交流! 结构和表现 当讨论Web标准时,一些事情总是被提及,那就是结构和表现分离的重要性。刚开始的时候理解结构和表现的不同之处可能很困难,特别是如果你不习惯于思考文档的语义结构时。然而,理解这点是很重要的,因为,当结构和表现分离后,用CSS文档来控制表现就是很容易的一件事了。 结构是由...

经验教程

58

收藏

88
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部