org.carrot2.util.RangeUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of carrot2-mini Show documentation
Show all versions of carrot2-mini Show documentation
Carrot2 search results clustering framework. Minimal functional subset
(core algorithms and infrastructure, no document sources).
/*
* Carrot2 project.
*
* Copyright (C) 2002-2019, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.util;
/**
* A helper class for performing various calculations for integer and double ranges.
*/
public class RangeUtils
{
/**
* Calculates the spacing between minor (secondary) "ticks" of a slider.
*
* @param min minimum value of the range
* @param max maximum value of the range
*/
public static int getIntMinorTicks(int min, int max)
{
int majorTicks = getIntMajorTicks(min, max);
if ((majorTicks % 2) == 0)
{
return majorTicks / 2;
}
else
{
return majorTicks;
}
}
/**
* Calculates the spacing between major (primary) "ticks" of a slider.
*
* @param min minimum value of the range
* @param max maximum value of the range
*/
public static int getIntMajorTicks(int min, int max)
{
int diff = max - min;
if (diff < 0)
{
diff = -diff;
}
if (diff <= 10)
{
return 1;
}
int magnitude = (int) (Math.log(diff - 1) / Math.log(10));
int bucket = (int) (diff / Math.pow(10, magnitude));
if (bucket <= 2)
{
return (int) (5 * Math.pow(10, magnitude - 1));
}
else if (bucket <= 5)
{
return (int) (10 * Math.pow(10, magnitude - 1));
}
else
{
return (int) (20 * Math.pow(10, magnitude - 1));
}
}
/**
* Calculates the spacing between minor (secondary) "ticks" of a slider.
*
* @param min minimum value of the range
* @param max maximum value of the range
*/
public static double getDoubleMinorTicks(double min, double max)
{
return getDoubleMajorTicks(min, max) / 2;
}
/**
* Calculates the spacing between major (primary) "ticks" of a slider.
*
* @param min minimum value of the range
* @param max maximum value of the range
*/
public static double getDoubleMajorTicks(double min, double max)
{
double diff = max - min;
if (diff < 0)
{
diff = -diff;
}
if (diff <= 1.0)
{
return 0.2;
}
int magnitude = (int) (Math.log(diff - 0.00001) / Math.log(10));
int bucket = (int) (diff / Math.pow(10, magnitude));
if (bucket <= 2)
{
return (5 * Math.pow(10, magnitude - 1));
}
else if (bucket <= 5)
{
return (10 * Math.pow(10, magnitude - 1));
}
else
{
return (20 * Math.pow(10, magnitude - 1));
}
}
}