aboutsummaryrefslogtreecommitdiff
path: root/src/libchart/classes/Axis.php
diff options
context:
space:
mode:
authorcassio <cassiopc@gmail.com>2013-07-02 05:46:45 +0000
committercassio <cassiopc@gmail.com>2013-07-02 05:46:45 +0000
commitbe2491b093b1f0ca430bede679ecbb670041e483 (patch)
treefe2da63d1811cb93e4352a43a113ace37b9f6017 /src/libchart/classes/Axis.php
parenta9aa438ea0558eb0044cf1e54a9190ddb41b65e5 (diff)
downloadboca-be2491b093b1f0ca430bede679ecbb670041e483.tar.gz
boca-be2491b093b1f0ca430bede679ecbb670041e483.zip
restructuring of boca's git
Diffstat (limited to 'src/libchart/classes/Axis.php')
-rw-r--r--src/libchart/classes/Axis.php167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/libchart/classes/Axis.php b/src/libchart/classes/Axis.php
new file mode 100644
index 0000000..c80fe97
--- /dev/null
+++ b/src/libchart/classes/Axis.php
@@ -0,0 +1,167 @@
+<?php
+ /** Libchart - PHP chart library
+ *
+ * Copyright (C) 2005-2006 Jean-Marc Trémeaux (jm.tremeaux at gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+ /**
+ * Automatic axis boundaries and ticks calibration
+ *
+ * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com)
+ */
+
+ class Axis
+ {
+ /**
+ * Creates a new axis formatter
+ *
+ * @access public
+ * @param integer minimum value on the axis
+ * @param integer maximum value on the axis
+ */
+
+ function Axis($min, $max)
+ {
+ $this->min = $min;
+ $this->max = $max;
+
+ $this->guide = 10;
+ }
+
+ /**
+ * Computes value between two ticks
+ *
+ * @access private
+ */
+
+ function quantizeTics()
+ {
+ // Approximate number of decades, in [1..10[
+
+ $norm = $this->delta / $this->magnitude;
+
+ // Approximate number of tics per decade
+
+ $posns = $this->guide / $norm;
+
+ if ($posns > 20)
+ $tics = 0.05; // e.g. 0, .05, .10, ...
+ else
+ if ($posns > 10)
+ $tics = 0.2; // e.g. 0, .1, .2, ...
+ else
+ if ($posns > 5)
+ $tics = 0.4; // e.g. 0, 0.2, 0.4, ...
+ else
+ if ($posns > 3)
+ $tics = 0.5; // e.g. 0, 0.5, 1, ...
+ else
+ if ($posns > 2)
+ $tics = 1; // e.g. 0, 1, 2, ...
+ else
+ if ($posns > 0.25)
+ $tics = 2; // e.g. 0, 2, 4, 6
+ else
+ $tics = ceil($norm);
+
+ $this->tics = $tics * $this->magnitude;
+ }
+
+ /**
+ * Computes automatic boundaries on the axis
+ *
+ * @access public
+ */
+
+ function computeBoundaries()
+ {
+ // Range
+
+ $this->delta = abs($this->max - $this->min);
+
+ // Check for null distribution
+
+ if($this->delta == 0)
+ $this->delta = 1;
+
+ // Order of magnitude of range
+
+ $this->magnitude = pow(10, floor(log10($this->delta)));
+
+ $this->quantizeTics();
+
+ $this->displayMin = floor($this->min / $this->tics) * $this->tics;
+ $this->displayMax = ceil($this->max / $this->tics) * $this->tics;
+ $this->displayDelta = $this->displayMax - $this->displayMin;
+
+ // Check for null distribution
+
+ if($this->displayDelta == 0)
+ $this->displayDelta = 1;
+ }
+
+ /**
+ * Set boundaries on the axis. Theses values override the automatic values.
+ *
+ * @access public
+ */
+
+ function setBoundaries($sampleCount, $yMinValue, $yMaxValue)
+ {
+ $this->sampleCount = $sampleCount;
+ $this->yMinValue = $yMinValue;
+ $this->yMaxValue = $yMaxValue;
+ }
+
+ /**
+ * Get the lower boundary on the axis
+ *
+ * @access public
+ * @return integer lower boundary on the axis
+ */
+
+ function getLowerBoundary()
+ {
+ return $this->displayMin;
+ }
+
+ /**
+ * Get the upper boundary on the axis
+ *
+ * @access public
+ * @return integer upper boundary on the axis
+ */
+
+ function getUpperBoundary()
+ {
+ return $this->displayMax;
+ }
+
+ /**
+ * Get the value between two ticks
+ *
+ * @access public
+ * @return integer value between two ticks
+ */
+
+ function getTics()
+ {
+ return $this->tics;
+ }
+ }
+?>