[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/projectmanager/inc/jpgraph-1.5.2/src/ -> jpgraph_log.php (source)

   1  <?php
   2  /*=======================================================================
   3  // File:     JPGRAPH_LOG.PHP
   4  // Description:    Log scale plot extension for JpGraph
   5  // Created:     2001-01-08
   6  // Author:    Johan Persson (johanp@aditus.nu)
   7  // Ver:        $Id: jpgraph_log.php 18250 2005-05-07 14:13:43Z ralfbecker $
   8  //
   9  // License:    This code is released under GPL 2.0
  10  // Copyright (C) 2001 Johan Persson
  11  //========================================================================
  12  */
  13  
  14  //===================================================
  15  // CLASS LogScale
  16  // Description: Logarithmic scale between world and screen
  17  //===================================================
  18  class LogScale extends LinearScale {
  19  //---------------
  20  // CONSTRUCTOR
  21  
  22      // Log scale is specified using the log of min and max
  23      function LogScale($min,$max,$type="y") {
  24      $this->LinearScale($min,$max,$type);
  25      $this->ticks = new LogTicks();
  26      }
  27  
  28  //----------------
  29  // PUBLIC METHODS    
  30  
  31      // Translate between world and screen
  32      function	Translate($a) {
  33      if( $a==0 ) $a=1;
  34      $a=log10($a);
  35      return floor($this->off + ($a*1.0 - $this->scale[0]) * $this->scale_factor); 
  36      }
  37  
  38      // Relative translate (don't include offset) usefull when we just want
  39      // to know the relative position (in pixels) on the axis    
  40      function RelTranslate($a) {
  41      if( $a==0 ) $a=1;
  42      $a=log10($a);
  43      return ($a*1.0 - $this->scale[0]) * $this->scale_factor; 
  44      }
  45          
  46      function GetMinVal() {
  47      return pow(10,$this->scale[0]);
  48      }
  49      
  50      function GetMaxVal() {
  51      return pow(10,$this->scale[1]);
  52      }
  53      
  54      // Logarithmic autoscaling is much simplier since we just
  55      // set the min and max to logs of the min and max values.
  56      // Note that for log autoscale the "maxstep" the fourth argument
  57      // isn't used. This is just included to give the method the same
  58      // signature as the linear counterpart.
  59      function AutoScale(&$img,$min,$max,$dummy) {
  60      if( $min==0 ) $min=1;
  61      assert($max>0);        
  62      $smin = floor(log10($min));
  63      $smax = ceil(log10($max));
  64      $this->Update($img,$smin,$smax);                    
  65      }
  66  //---------------
  67  // PRIVATE METHODS    
  68  } // Class
  69  
  70  //===================================================
  71  // CLASS LogTicks
  72  // Description: 
  73  //===================================================
  74  class LogTicks extends Ticks{
  75  //---------------
  76  // CONSTRUCTOR
  77      function LogTicks() {
  78      }
  79  //---------------
  80  // PUBLIC METHODS    
  81      function IsSpecified() {
  82      return true;
  83      }
  84      
  85      // For log scale it's meaningless to speak about a major step
  86      // We just return -1 to make the framework happy specificall
  87      // StrokeLabels()
  88      function GetMajor() {
  89      return -1;
  90      }
  91      // Draw ticks on image "img" using scale "scale". The axis absolute
  92      // position in the image is specified in pos, i.e. for an x-axis
  93      // it specifies the absolute y-coord and for Y-ticks it specified the
  94      // absolute x-position.
  95      function Stroke(&$img,&$scale,$pos) {
  96      $start = $scale->GetMinVal();
  97      $limit = $scale->GetMaxVal();
  98      $nextMajor = 10*$start;
  99      $step = $nextMajor / 10.0;
 100          
 101          
 102      $img->SetLineWeight($this->weight);            
 103          
 104      if( $scale->type == "y" ) {
 105          // member direction specified if the ticks should be on
 106          // left or right side.
 107          $a=$pos + $this->direction*$this->GetMinTickAbsSize();
 108          $a2=$pos + $this->direction*$this->GetMajTickAbsSize();    
 109              
 110          $count=1; 
 111          $this->maj_ticks_pos[0]=$scale->Translate($start);
 112          $this->maj_ticklabels_pos[0]=$scale->Translate($start);
 113          if( $this->supress_first )
 114          $this->maj_ticks_label[0]="";
 115          else
 116          $this->maj_ticks_label[0]=$start;    
 117          $i=1;
 118          for($y=$start; $y<=$limit; $y+=$step,++$count  ) {
 119          $ys=$scale->Translate($y);    
 120          $this->ticks_pos[]=$ys;
 121          $this->ticklabels_pos[]=$ys;
 122          if( $count % 10 == 0 ) {
 123              if( $this->majcolor!="" ) $img->PushColor($this->majcolor);
 124              $img->Line($pos,$ys,$a2,$ys);
 125              if( $this->majcolor!="" ) $img->PopColor();
 126              $this->maj_ticks_pos[$i]=$ys;
 127              $this->maj_ticklabels_pos[$i]=$ys;
 128              $this->maj_ticks_label[$i]=$nextMajor;    
 129              ++$i;                        
 130              $nextMajor *= 10;
 131              $step *= 10;    
 132              $count=1;                 
 133          }
 134          else {
 135              if( $this->mincolor!="" ) $img->PushColor($this->mincolor);
 136              $img->Line($pos,$ys,$a,$ys);        
 137              if( $this->mincolor!="" ) $img->PopCOlor();
 138          }
 139          }        
 140      }
 141      else {
 142          $a=$pos - $this->direction*$this->GetMinTickAbsSize();
 143          $a2=$pos - $this->direction*$this->GetMajTickAbsSize();    
 144          $count=1; 
 145          $this->maj_ticks_pos[0]=$scale->Translate($start);
 146          $this->maj_ticklabels_pos[0]=$scale->Translate($start);
 147          if( $this->supress_first )
 148          $this->maj_ticks_label[0]="";
 149          else
 150          $this->maj_ticks_label[0]=$start;    
 151          $i=1;            
 152          for($x=$start; $x<=$limit; $x+=$step,++$count  ) {
 153          $xs=$scale->Translate($x);    
 154          $this->ticks_pos[]=$xs;
 155          $this->ticklabels_pos[]=$xs;
 156          if( $count % 10 == 0 ) {
 157              $img->Line($xs,$pos,$xs,$a2);
 158              $this->maj_ticks_pos[$i]=$xs;
 159              $this->maj_ticklabels_pos[$i]=$xs;
 160              $this->maj_ticks_label[$i]=$nextMajor;    
 161              ++$i;                                
 162              $nextMajor *= 10;
 163              $step *= 10;    
 164              $count=1;                 
 165          }
 166          else
 167              $img->Line($xs,$pos,$xs,$a);        
 168          }        
 169      }
 170      return true;
 171      }
 172  } // Class
 173  /* EOF */
 174  ?>


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7