PHP绘图对象结构设计与应用实例_PHP
本文主要阐述如何在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{
$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环境下调试通过。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Der Service -Container und die Dienstleister von Laravel sind für seine Architektur von grundlegender Bedeutung. In diesem Artikel werden Servicecontainer untersucht, Details für die Erstellung, Registrierung, Registrierung und die praktische Nutzung mit Beispielen mit Beispielen untersucht. Wir beginnen mit einem Ove

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.
