六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

PHP繪圖對象結構設計與應用案例

[摘要]本文主要闡述如何在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<$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環境下調試通過。



主站蜘蛛池模板: 天天噜天天噜噜在线视频 | 青青草原网站在线观看 | 日本一区二区三 | 天天狠狠弄夜夜狠狠躁·太爽了 | 亚洲第一看片 | 亚洲 欧美 另类 综合 日韩 | 泰剧不期而爱第三季免费全集观看 | 伊人影视大全 | 小泽玛利亚久久一区二区三区 | 在线观看视频污 | 日本一区二区在线免费观看 | 色天天躁夜夜躁天干天干 | 亚洲成a人 | 青青草久热精品视频在线观看 | 伊人久久大香线蕉综合热线 | 三级国产在线观看 | 伊人网成人| 性生生活三级视频观看 | 日韩免费视频在线观看 | 亚洲免费a | 亚洲国产成人久久综合碰 | 亚洲免费h| 亚洲大片 | 日韩欧美成人乱码一在线 | 在线视频 亚洲 | 亚洲综合图色40p | 亚洲国产一区二区在线 | 天天看a | 一区二区三区视频在线播放 | 无声在线完整版免费观看 | 亚洲成a人片在线观看中文动漫 | 天天操天天操天天射 | 中文字幕第二区 | 无码中文字幕乱在线观看 | 欧美特黄一级大片 | 日日摸夜夜欧美一区二区 | 亚洲第一精品夜夜躁人人爽 | 午夜老司机永久免费看片 | 夭天干天天做天天免费看 | 香蕉国产综合久久猫咪 | 欧美综合在线视频 |