meteor_shower
高级会员

揮刀戲江湖譜寫情緣傳奇
UID 66798
精华
2
积分 957
帖子 897
金钱 927 喜悦币
威望 30
人脉 0
阅读权限 50
注册 2005-9-21 来自 深圳
状态 离线
|
生成曲線坉的類
類文檔
<?php
class LabelFormat { var $width; var $precision; var $specific; var $vertical; var $fontsize; var $fun;
function LabelFormat ($width=0, $prec=1, $spec="f", $fontsize=3, $vert=0, $function="") { $this->fun=$function; $this->width=$width; $this->precision=$prec; $this->specific=$spec; $this->fontsize=$fontsize; $this->vertical=$vert; }
function Out ($value) { //$this->fun=$fun; $format_string="%"; if ($this->width) $format_string.=$this->width; if ($this->precision) $format_string.=".".$this->precision; $format_string.=$this->specific; if (!empty($this->fun)) { $out=call_user_func ($this->fun, $value); $wstring=sprintf($format_string, $out); } else $wstring=sprintf($format_string, $value); return $wstring; } }
class graph2d {
var $image_type;
var $dimx; var $dimy;
var $xmin; var $xmax;
var $ymin; var $ymax;
var $xstep; var $ystep;
var $xskip; var $yskip;
var $xformat; var $yformat;
var $b_red; var $b_green; var $b_blue; var $b_alpha; var $a_red; var $a_green; var $a_blue; var $a_alpha;
var $is_grid; var $grid_red; var $grid_green; var $grid_blue; //var $grid_style;
var $top; var $left; var $right; var $bottom;
var $xlegend; var $ylegend; var $title;
var $image;
function graph2d ($image_type, $width, $height, $xleft=0, $ytop=0, $xright=0, $ybottom=0, $br=0xFF, $bg=0xFF, $bb=0xFF, $b_alpha=0, $ar=0, $ag=0, $ab=0, $a_alpha=0) { $this->image_type=$image_type; $this->dimx=(int)$width; $this->dimy=(int)$height; $this->b_red=(int)$br; $this->b_green=(int)$bg; $this->b_blue=(int)$bb;
$this->a_red=(int)$ar; $this->a_green=(int)$ag; $this->a_blue=(int)$ab;
$this->a_alpha=(int)$a_alpha; $this->b_alpha=(int)$b_alpha;
$this->left=(int)$xleft; $this->top=(int)$ytop; $this->right=(int)$xright; $this->bottom=(int)$ybottom;
$this->xskip=1; $this->yskip=1;
$this->xformat=new LabelFormat(); $this->yformat=new LabelFormat();
$this->xlegend=""; $this->ylegend=""; $this->title="";
$this->is_grid=FALSE; //$this->grid_style=array();
$imtype="Content-type: image/".$this->image_type; header ($imtype); $this->image=@imagecreate ($this->dimx, $this->dimy);// or die "Cannot initialize new GD Image stream"; }
function SetAxisScales ($xmin, $xmax, $xstep, $xskip, $ymin, $ymax, $ystep, $yskip) { $this->xmin=(double)$xmin; $this->xmax=(double)$xmax; $this->xstep=(double)$xstep; $this->xskip=(int)$xskip;
$this->ymin=(double)$ymin; $this->ymax=(double)$ymax; $this->ystep=(double)$ystep; $this->yskip=(int)$yskip; }
function SetXLegend ($xleg) { $this->xlegend=$xleg; }
function SetYLegend ($yleg) { $this->ylegend=$yleg; }
function SetTitle ($title) { $this->title=$title; }
function SetLineThickness ($thikness) { if ( is_resource ($this->image) && is_int ($thikness)) imagesetthickness ($this->image, $thikness); }
function SetGrid($grid, $red, $green, $blue) { $this->is_grid=$grid; $this->grid_red=$red; $this->grid_green=$green; $this->grid_blue=$blue; //$this->grid_style=$style; }
function GraphCoord () { if (function_exists("imagecolorallocatealpha")) { $background=imagecolorallocatealpha ($this->image, $this->b_red, $this->b_green, $this->b_blue, $this->b_alpha); $foreground=imagecolorallocatealpha ($this->image, $this->a_red, $this->a_green, $this->a_blue, $this->a_alpha); } else { $background=imagecolorallocate ($this->image, $this->b_red, $this->b_green, $this->b_blue); if ($this->b_alpha) imagecolortransparent($this->image, $background); $foreground=imagecolorallocate ($this->image, $this->a_red, $this->a_green, $this->a_blue); }
$X=$this->dimx-($this->left+$this->right); $Y=$this->dimy-($this->top+$this->bottom);
$scaleX=($this->xmax-$this->xmin)/$X; $scaleY=($this->ymax-$this->ymin)/$Y;
$gcolor=imagecolorallocate ($this->image, $this->grid_red, $this->grid_green, $this->grid_blue); if ($this->is_grid) $coord=imagerectangle($this->image, $this->left, $this->top, $this->dimx-$this->right, $this->dimy-$this->bottom, $gcolor); else $coord=imagerectangle($this->image, $this->left, $this->top, $this->dimx-$this->right, $this->dimy-$this->bottom, $foreground); if (!empty($this->title)) imagestring ($this->image, 4, $this->left+$X/2-strlen($this->title)*imagefontwidth(4)/2, $this->top/2-imagefontheight(4)/2, $this->title, $foreground); $numx=($this->xmax-$this->xmin)/$this->xstep+1; $numy=($this->ymax-$this->ymin)/$this->ystep+1; for ($i=0; $i<$numx; $i++) { $x=($i*$X)/($numx-1)+$this->left; if ($i>0 && $i<$numx-1) if ($this->is_grid) imageline ($this->image, $x, $Y+$this->top, $x, $this->top, $gcolor); else imageline ($this->image, $x, $Y+$this->top-5, $x, $Y+$this->top+5, $foreground); if ($i%$this->xskip==0) { $xstr=$this->xformat->Out($this->xmin+($i*$X)*$scaleX/($numx-1)); if ($this->xformat->vertical) imagestringup ($this->image, $this->xformat->fontsize, $x-imagefontwidth($this->xformat->fontsize), $Y+$this->top+strlen($xstr)*imagefontheight($this->xformat->fontsize)/2+5, $xstr, $foreground); else imagestring ($this->image, $this->xformat->fontsize, $x-strlen($xstr)*imagefontwidth($this->xformat->fontsize)/2, $Y+$this->top+imagefontheight($this->xformat->fontsize)/2, $xstr, $foreground); } } if (!empty($this->xlegend)) imagestring ($this->image, 3, $this->left+$X/2, $this->top+$Y+3*imagefontheight(3)/2, $this->xlegend, $foreground); for ($i=0; $i<$numy; $i++) { $y=($i*$Y)/($numy-1); if ($i>0 && $i<$numy-1) if ($this->is_grid) imageline ($this->image, $this->left-5, $y+$this->top, $this->left+$X, $y+$this->top, $gcolor); else imageline ($this->image, $this->left-5, $y+$this->top, $this->left+5, $y+$this->top, $foreground); if ($i%$this->yskip==0) { $ystr=$this->yformat->Out($this->ymin+($i*$Y)*$scaleY/($numy-1)); if ($this->yformat->vertical) imagestringup ($this->image, $this->yformat->fontsize, $this->left-imagefontheight($this->yformat->fontsize)-5, $Y+$this->top+$this->bottom-$y-3*strlen($ystr)*imagefontwidth($this->yformat->fontsize)/2, $ystr, $foreground); else imagestring ($this->image, $this->yformat->fontsize, $this->left-strlen($ystr)*imagefontwidth($this->yformat->fontsize)-5, $Y+$this->top-$y-imagefontheight($this->yformat->fontsize)/2, $ystr, $foreground); } } if (!empty($this->ylegend)) imagestringup ($this->image, 3, $this->left/2-3*imagefontheight(3)/2, $this->top+$Y/2+strlen($this->ylegend)*imagefontwidth(3)/2, $this->ylegend, $foreground); }
function Draw ($xarray, $yarray, $r=0, $g=0, $b=0) { if (!is_array($xarray) || !is_array($yarray)) return;
if (function_exists("imagecolorallocatealpha")) { $background=imagecolorallocatealpha ($this->image, $this->b_red, $this->b_green, $this->b_blue, $this->b_alpha); $foreground=imagecolorallocatealpha ($this->image, $this->a_red, $this->a_green, $this->a_blue, $this->a_alpha); } else { $background=imagecolorallocate ($this->image, $this->b_red, $this->b_green, $this->b_blue); if ($this->b_alpha) imagecolortransparent($this->image, $background); $foreground=imagecolorallocate ($this->image, $this->a_red, $this->a_green, $this->a_blue); } $graphcolor=imagecolorallocate ($this->image, $r, $g, $b);
$X=$this->dimx-($this->left+$this->right); $Y=$this->dimy-($this->top+$this->bottom);
$scaleX=($this->xmax-$this->xmin)/$X; $scaleY=($this->ymax-$this->ymin)/$Y;
$numx=($this->xmax-$this->xmin)/$this->xstep+1; $numy=($this->ymax-$this->ymin)/$this->ystep+1;
$nx=count($xarray); $ny=count($yarray); $n=min($nx, $ny);
for ($i=1; $i<$n; $i++) imageline($this->image, $this->left+($xarray[$i-1]-$this->xmin)/$scaleX, $this->top+($this->ymax-$yarray[$i-1])/$scaleY, $this->left+($xarray[$i]-$this->xmin)/$scaleX, $this->top+($this->ymax-$yarray[$i])/$scaleY, $graphcolor); }
function ImageOut ($filename) { if (strcasecmp ($this->image_type, "jpeg")==0) imagejpeg ($this->image, $filename, 100); elseif (strcasecmp ($this->image_type, "png")==0) imagepng ($this->image, $filename, 100); elseif (strcasecmp ($this->image_type, "gif")==0) imagegif ($this->image, $filename, 100); elseif (strcasecmp ($this->image_type, "wbmp")==0) imagewbmp ($this->image, $filename, 100); }
function Close () { imagedestroy ($this->image); } } ?>
|
|