Java tutorial
//package com.java2s; /* JOpenChart Java Charting Library and Toolkit Copyright (C) 2001 Sebastian Mller http://jopenchart.sourceforge.net 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ChartUtilities.java Created on 21. September 2001, 17:42 */ public class Main { /** Calculates the best tick spacing for the rounded minimal and maximal * values. * @param min the rounded minimal value * @param max the rounded maximal value * @return the spacing of ticks on the x-axis. */ public static double calculateTickSpacing(double min, double max) { double spacing = 1.0; double diff = max - min; int exp = exp(diff); exp--; spacing = 1.0 * Math.pow(10.0, (double) exp); // Currently, only every second tick gets a label, so 20 - 40 ticks are fine. // This should be reduced in a loop probably. if ((diff / spacing) < 20) return 0.5 * spacing; else if ((diff / spacing) > 40) return 2 * spacing; else return spacing; } /** A double value can be represented like * <code>d = x * 10<sup>exp</sup></code> and this method returns * the value of exp for a double d. * @param d the double value * @return the exponent of 10 */ public static int exp(double d) { int exp = 0; boolean positive = (d <= -1 || d >= 1); while ((d <= -10) || (d >= 10) || ((d > -1) && (d < 1))) { if (positive) { d /= 10; exp++; } else { d *= 10; exp--; } } return exp; } }