public void testGetOptimalTickDistance() { assertEquals(10d, DiagramAxis.getOptimalTickDistance(12, 31, 3), 1e-6); assertEquals(0.1d, DiagramAxis.getOptimalTickDistance(0.12, 0.31, 3), 1e-9); assertEquals(2.5d, DiagramAxis.getOptimalTickDistance(52, 57, 3), 1e-6); assertEquals(2.5d, DiagramAxis.getOptimalTickDistance(15, 20, 3), 1e-6); assertEquals(4.0d, DiagramAxis.getOptimalTickDistance(14.8, 20.3, 3), 1e-6); assertEquals(5.0d, DiagramAxis.getOptimalTickDistance(14.8, 24.8, 3), 1e-6); assertEquals(2.0d, DiagramAxis.getOptimalTickDistance(14.8, 18.8, 3), 1e-6); assertEquals(2.0d, DiagramAxis.getOptimalTickDistance(10.2, 13.8, 3), 1e-6); assertEquals(2.0d, DiagramAxis.getOptimalTickDistance(10.2, 13.8, 3), 1e-6); assertEquals(7500.0d, DiagramAxis.getOptimalTickDistance(-10200, 5.0, 3), 1e-6); }
public void setOptimalSubDivision(int numMajorTicksMin, int numMajorTicksMax, int numMinorTicks) { final double oldMinValue = minValue; final double oldMaxValue = maxValue; final double oldDelta = oldMaxValue - oldMinValue; double deltaDeltaMin = Double.MAX_VALUE; int numMajorTicksOpt = numMajorTicks; double newMinValueOpt = oldMinValue; double newMaxValueOpt = oldMaxValue; for (int numMajorTicks = numMajorTicksMin; numMajorTicks <= numMajorTicksMax; numMajorTicks++) { final double tickDist = getOptimalTickDistance(oldMinValue, oldMaxValue, numMajorTicks); final double newMinValue = adjustFloor(oldMinValue, tickDist); final double newMaxValue = adjustCeil(oldMaxValue, tickDist); final double newDelta = newMaxValue - newMinValue; final double deltaDelta = Math.abs(newDelta - oldDelta); if (deltaDelta < deltaDeltaMin) { deltaDeltaMin = deltaDelta; numMajorTicksOpt = numMajorTicks; newMinValueOpt = newMinValue; newMaxValueOpt = newMaxValue; } } setSubDivision(newMinValueOpt, newMaxValueOpt, numMajorTicksOpt, numMinorTicks); }