1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
package tim.prune.data;
/**
* Class to provide distance constants and functions
*/
public abstract class Distance
{
/** distance units */
public enum Units
{
/** Kilometres */
KILOMETRES,
/** Miles */
MILES,
/** Metres */
METRES,
/** Feet */
FEET
}
// Geographical constants
private static final double EARTH_RADIUS_KM = 6372.795;
// Conversion constants
private static final double CONVERT_KM_TO_MILES = 0.621371192;
/**
* Convert the given angle in radians into a distance
* @param inAngDist angular distance in radians
* @param inUnits desired units, eg miles or km
* @return distance in specified format
*/
public static double convertRadiansToDistance(double inAngDist, Units inUnits)
{
// Multiply by appropriate factor
if (inUnits == Units.MILES)
return inAngDist * EARTH_RADIUS_KM * CONVERT_KM_TO_MILES;
else if (inUnits == Units.METRES)
return inAngDist * EARTH_RADIUS_KM * 1000;
// default kilometres
return inAngDist * EARTH_RADIUS_KM;
}
/**
* Convert the given distance into an angle in radians
* @param inDist distance to convert
* @param inUnits units, eg miles or km
* @return angular distance in radians
*/
public static double convertDistanceToRadians(double inDist, Units inUnits)
{
// Divide by appropriate factor
if (inUnits == Units.MILES)
return inDist / EARTH_RADIUS_KM / CONVERT_KM_TO_MILES;
else if (inUnits == Units.METRES)
return inDist / EARTH_RADIUS_KM / 1000;
// default kilometres
return inDist / EARTH_RADIUS_KM;
}
/**
* Convert the given distance from metres to miles
* @param inMetres number of metres
* @return number of miles
*/
public static double convertMetresToMiles(double inMetres)
{
return inMetres / 1000.0 * CONVERT_KM_TO_MILES;
}
}
|