Source for org.jfree.chart.axis.StandardTickUnitSource

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * ---------------------------
  28:  * StandardTickUnitSource.java
  29:  * ---------------------------
  30:  * (C) Copyright 2003, 2004, by Object Refinery Limited.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   -;
  34:  *
  35:  * $Id: StandardTickUnitSource.java,v 1.2.2.2 2006/01/27 13:53:28 mungady Exp $
  36:  *
  37:  * Changes
  38:  * -------
  39:  * 23-Sep-2003 : Version 1 (DG);
  40:  *
  41:  */
  42: 
  43: package org.jfree.chart.axis;
  44: 
  45: import java.text.DecimalFormat;
  46: 
  47: /**
  48:  * A source that can used by the {@link NumberAxis} class to obtain a
  49:  * suitable {@link TickUnit}.
  50:  */
  51: public class StandardTickUnitSource implements TickUnitSource {
  52: 
  53:     /** Constant for log(10.0). */
  54:     private static final double LOG_10_VALUE = Math.log(10.0);
  55:     
  56:     /**
  57:      * Returns a tick unit that is larger than the supplied unit.
  58:      *
  59:      * @param unit  the unit (<code>null</code> not permitted).
  60:      *
  61:      * @return A tick unit that is larger than the supplied unit.
  62:      */
  63:     public TickUnit getLargerTickUnit(TickUnit unit) {
  64:         double x = unit.getSize();
  65:         double log = Math.log(x) / LOG_10_VALUE;
  66:         double higher = Math.ceil(log);
  67:         return new NumberTickUnit(Math.pow(10, higher), 
  68:                 new DecimalFormat("0.0E0"));
  69:     }
  70: 
  71:     /**
  72:      * Returns the tick unit in the collection that is greater than or equal
  73:      * to (in size) the specified unit.
  74:      *
  75:      * @param unit  the unit (<code>null</code> not permitted).
  76:      *
  77:      * @return A unit from the collection.
  78:      */
  79:     public TickUnit getCeilingTickUnit(TickUnit unit) {
  80:         return getLargerTickUnit(unit);
  81:     }
  82: 
  83:     /**
  84:      * Returns the tick unit in the collection that is greater than or equal
  85:      * to the specified size.
  86:      *
  87:      * @param size  the size.
  88:      *
  89:      * @return A unit from the collection.
  90:      */
  91:     public TickUnit getCeilingTickUnit(double size) {
  92:         double log = Math.log(size) / LOG_10_VALUE;
  93:         double higher = Math.ceil(log);
  94:         return new NumberTickUnit(Math.pow(10, higher), 
  95:                 new DecimalFormat("0.0E0"));
  96:     }
  97:     
  98: }