]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/Altitude.java
Version 4, January 2008
[GpsPrune.git] / tim / prune / data / Altitude.java
index 73552ae62977528d97ca91784a9e3d1dec6cc5da..af247cfe0217d07acce4791832a39e0207298b6e 100644 (file)
@@ -17,7 +17,9 @@ public class Altitude
 
 
        /**
-        * Constructor
+        * Constructor using String
+        * @param inString string to parse
+        * @param inFormat format of altitude, either metres or feet
         */
        public Altitude(String inString, int inFormat)
        {
@@ -25,7 +27,7 @@ public class Altitude
                {
                        try
                        {
-                               _value = Integer.parseInt(inString.trim());
+                               _value = (int) Double.parseDouble(inString.trim());
                                _format = inFormat;
                                _valid = true;
                        }
@@ -35,7 +37,9 @@ public class Altitude
 
 
        /**
-        * 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)
        {
@@ -79,6 +83,7 @@ public class Altitude
         */
        public int getValue(int inFormat)
        {
+               // TODO: Fix rounding errors here converting between units - return double?
                if (inFormat == _format)
                        return _value;
                if (inFormat == FORMAT_METRES)
@@ -98,6 +103,19 @@ public class Altitude
         * @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())
@@ -106,8 +124,8 @@ public class Altitude
                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);
        }
 }