X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FDistance.java;h=311cd886a5af098d8764478d4e5aa1d313b08f44;hp=5425873102aa752833c9953c91e967705d0ad75b;hb=da0b1f449260a0b4a94318006382a9039726ef3e;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b diff --git a/tim/prune/data/Distance.java b/tim/prune/data/Distance.java index 5425873..311cd88 100644 --- a/tim/prune/data/Distance.java +++ b/tim/prune/data/Distance.java @@ -8,27 +8,45 @@ public abstract class Distance // distance formats public static final int UNITS_KILOMETRES = 1; public static final int UNITS_MILES = 2; + public static final int UNITS_METRES = 3; // Geographical constants private static final double EARTH_RADIUS_KM = 6372.795; - private static final double EARTH_RADIUS_MILES = 3959.8712255; // Conversion constants - //private static final double CONVERT_KM_TO_MILES = 1.609344; - //private static final double CONVERT_MILES_TO_KM = 0.621371192; + 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, miles or km + * @param inUnits desired units, eg miles or km * @return distance in specified format */ - public static double convertRadians(double inAngDist, int inUnits) + public static double convertRadiansToDistance(double inAngDist, int inUnits) { // Multiply by appropriate factor if (inUnits == UNITS_MILES) - return inAngDist * EARTH_RADIUS_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, int 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; + } }