home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Image / Graph / Axis / Radar.php < prev   
Encoding:
PHP Script  |  2008-07-02  |  6.0 KB  |  204 lines

  1. <?php
  2.  
  3. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  4.  
  5. /**
  6.  * Class for axis handling.
  7.  *
  8.  * PHP versions 4 and 5
  9.  *
  10.  * LICENSE: This library is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU Lesser General Public License as published by
  12.  * the Free Software Foundation; either version 2.1 of the License, or (at your
  13.  * option) any later version. This library is distributed in the hope that it
  14.  * will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  15.  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  16.  * General Public License for more details. You should have received a copy of
  17.  * the GNU Lesser General Public License along with this library; if not, write
  18.  * to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19.  * 02111-1307 USA
  20.  *
  21.  * @category   Images
  22.  * @package    Image_Graph
  23.  * @subpackage Axis
  24.  * @author     Jesper Veggerby <pear.nosey@veggerby.dk>
  25.  * @copyright  Copyright (C) 2003, 2004 Jesper Veggerby Hansen
  26.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  27.  * @version    CVS: $Id: Radar.php,v 1.6 2005/08/03 21:22:11 nosey Exp $
  28.  * @link       http://pear.php.net/package/Image_Graph
  29.  */
  30.  
  31. /**
  32.  * Include file Image/Graph/Axis/Category.php
  33.  */
  34. require_once 'Image/Graph/Axis/Category.php';
  35.  
  36. /**
  37.  * Displays an 'X'-axis in a radar plot chart.
  38.  *
  39.  * This axis maps the number of elements in the dataset to a angle (from 0-
  40.  * 360 degrees). Displaying the axis consist of drawing a number of lines from
  41.  * center to the edge of the 'circle' than encloses the radar plot. The labels
  42.  * are drawn on the 'ends' of these radial lines.
  43.  *
  44.  * @category   Images
  45.  * @package    Image_Graph
  46.  * @subpackage Axis
  47.  * @author     Jesper Veggerby <pear.nosey@veggerby.dk>
  48.  * @copyright  Copyright (C) 2003, 2004 Jesper Veggerby Hansen
  49.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  50.  * @version    Release: 0.7.2
  51.  * @link       http://pear.php.net/package/Image_Graph
  52.  */
  53. class Image_Graph_Axis_Radar extends Image_Graph_Axis_Category
  54. {
  55.  
  56.     /**
  57.      * Specifies the number of pixels, the labels is offsetted from the end of
  58.      * the axis
  59.      *
  60.      * @var int
  61.      * @access private
  62.      */
  63.     var $_distanceFromEnd = 5;
  64.  
  65.     /**
  66.      * Gets the minimum value the axis will show.
  67.      *
  68.      * This is always 0
  69.      *
  70.      * @return double The minumum value
  71.      * @access private
  72.      */
  73.     function _getMinimum()
  74.     {
  75.         return 0;
  76.     }
  77.  
  78.     /**
  79.      * Gets the maximum value the axis will show.
  80.      *
  81.      * This is always the number of labels passed to the constructor.
  82.      *
  83.      * @return double The maximum value
  84.      * @access private
  85.      */
  86.     function _getMaximum()
  87.     {
  88.         return count($this->_labels);
  89.     }
  90.  
  91.     /**
  92.      * Calculate the delta value (the number of pixels representing one unit
  93.      * on the axis)
  94.      *
  95.      * @return double The label interval
  96.      * @access private
  97.      */
  98.     function _calcDelta()
  99.     {
  100.         if (abs($this->_getMaximum() - $this->_getMinimum()) == 0) {
  101.             $this->_delta = false;
  102.         } else {
  103.             $this->_delta = 360 / ($this->_getMaximum() - $this->_getMinimum());
  104.         }                
  105.     }    
  106.  
  107.     /**
  108.      * Get the pixel position represented by a value on the canvas
  109.      *
  110.      * @param double $value the value to get the pixel-point for
  111.      * @return double The pixel position along the axis
  112.      * @access private
  113.      */
  114.     function _point($value)
  115.     {
  116.         return (90 + (int) ($this->_value($value) * $this->_delta)) % 360;
  117.     }
  118.  
  119.     /**
  120.      * Get the size in pixels of the axis.
  121.      *
  122.      * For a radar plot this is always 0
  123.      *
  124.      * @return int The size of the axis
  125.      * @access private
  126.      */
  127.     function _size()
  128.     {
  129.         return 0;
  130.     }
  131.  
  132.     /**
  133.      * Sets the distance from the end of the category lines to the label.
  134.      *
  135.      * @param int $distance The distance in pixels
  136.      */
  137.     function setDistanceFromEnd($distance = 5)
  138.     {
  139.         $this->_distanceFromEnd = $distance;
  140.     }
  141.  
  142.     /**
  143.      * Draws axis lines.
  144.      *
  145.      * @access private
  146.      */
  147.     function _drawAxisLines()
  148.     {
  149.     }
  150.  
  151.     /**
  152.      * Output an axis tick mark.
  153.      *
  154.      * @param int $value The value to output
  155.      * @access private
  156.      */
  157.     function _drawTick($value, $level = 1)
  158.     {
  159.         $centerX = (int) (($this->_left + $this->_right) / 2);
  160.         $centerY = (int) (($this->_top + $this->_bottom) / 2);
  161.  
  162.         $radius = min($this->height(), $this->width()) / 2;
  163.  
  164.         $endPoint = array ('X' => $value, 'Y' => '#max#');
  165.         $dX = $this->_pointX($endPoint);
  166.         $dY = $this->_pointY($endPoint);
  167.  
  168.         $offX = ($dX - $centerX);
  169.         $offY = ($dY - $centerY);
  170.  
  171.         $hyp = sqrt($offX*$offX + $offY*$offY);
  172.         if ($hyp != 0) {
  173.             $scale = $this->_distanceFromEnd / $hyp;
  174.         } else {
  175.             $scale = 1;
  176.         }
  177.  
  178.         $adX = $dX + $offX * $scale;
  179.         $adY = $dY + $offY * $scale;
  180.  
  181.         if (is_object($this->_dataPreProcessor)) {
  182.             $labelText = $this->_dataPreProcessor->_process($value);
  183.         } else {
  184.             $labelText = $value;
  185.         }
  186.  
  187.         if ((abs($dX - $centerX) < 1.5) && ($dY < $centerY)) {
  188.             $align = IMAGE_GRAPH_ALIGN_BOTTOM + IMAGE_GRAPH_ALIGN_CENTER_X;
  189.         } elseif ((abs($dX - $centerX) < 1.5) && ($dY > $centerY)) {
  190.             $align = IMAGE_GRAPH_ALIGN_TOP + IMAGE_GRAPH_ALIGN_CENTER_X;
  191.         } elseif ($dX < $centerX) {
  192.             $align = IMAGE_GRAPH_ALIGN_RIGHT + IMAGE_GRAPH_ALIGN_CENTER_Y;
  193.         } else {
  194.             $align = IMAGE_GRAPH_ALIGN_LEFT + IMAGE_GRAPH_ALIGN_CENTER_Y;
  195.         }
  196.         $this->write($adX, $adY, $labelText, $align);
  197.  
  198.         $this->_getLineStyle();
  199.         $this->_canvas->line(array('x0' => $centerX, 'y0' => $centerY, 'x1' => $dX, 'y1' => $dY));
  200.     }
  201.  
  202. }
  203.  
  204. ?>