/**
- * Constructor
+ * Constructor using String
+ * @param inString string to parse
+ * @param inFormat format of altitude, either metres or feet
*/
public Altitude(String inString, int inFormat)
{
{
try
{
- _value = Integer.parseInt(inString.trim());
+ _value = (int) Double.parseDouble(inString.trim());
_format = inFormat;
_valid = true;
}
/**
- * Constructor
+ * Constructor with int vaue
+ * @param inValue int value of altitude
+ * @param inFormat format of altitude, either metres or feet
*/
public Altitude(int inValue, int inFormat)
{
*/
public int getValue(int inFormat)
{
+ // TODO: Fix rounding errors here converting between units - return double?
if (inFormat == _format)
return _value;
if (inFormat == FORMAT_METRES)
* @return Interpolated Altitude object
*/
public static Altitude interpolate(Altitude inStart, Altitude inEnd, int inIndex, int inNumSteps)
+ {
+ return interpolate(inStart, inEnd, 1.0 * (inIndex + 1) / (inNumSteps + 1));
+ }
+
+
+ /**
+ * Interpolate a new Altitude object between the given ones
+ * @param inStart start altitude
+ * @param inEnd end altitude
+ * @param inFrac fraction of distance from first point
+ * @return Interpolated Altitude object
+ */
+ public static Altitude interpolate(Altitude inStart, Altitude inEnd, double inFrac)
{
// Check if altitudes are valid
if (inStart == null || inEnd == null || !inStart.isValid() || !inEnd.isValid())
int altFormat = inStart.getFormat();
int startValue = inStart.getValue();
int endValue = inEnd.getValue(altFormat);
- int newValue = startValue
- + (int) ((endValue - startValue) * 1.0 / (inNumSteps + 1) * (inIndex + 1));
+ // interpolate between start and end
+ int newValue = startValue + (int) ((endValue - startValue) * inFrac);
return new Altitude(newValue, altFormat);
}
}