add compass bearing to voice output
authorAnthony Towns <aj@erisian.com.au>
Thu, 11 Nov 2010 05:57:52 +0000 (15:57 +1000)
committerAnthony Towns <aj@erisian.com.au>
Thu, 11 Nov 2010 05:57:52 +0000 (15:57 +1000)
ao-tools/altosui/AltosDisplayThread.java
ao-tools/altosui/AltosGreatCircle.java

index b5b2777e7885bbc79071faae7fd4238e0563a446..375965b904d68364e495a3c2081ab0de46dbad64 100644 (file)
@@ -69,8 +69,10 @@ public class AltosDisplayThread extends Thread {
                            state.state < Altos.ao_flight_landed &&
                            state.range >= 0)
                        {
-                               voice.speak("Height %d, bearing %d, elevation %d, range %d.\n",
+                               voice.speak("Height %d, bearing %s %d, elevation %d, range %d.\n",
                                            (int) (state.height + 0.5),
+                        state.from_pad.bearing_words(
+                            AltosGreatCircle.BEARING_VOICE),
                                            (int) (state.from_pad.bearing + 0.5),
                                            (int) (state.elevation + 0.5),
                                            (int) (state.range + 0.5));
index 07c02c16c34c17d665335ff3c657482a289a4a62..aa6ae3b9b0017ac47be6fca59fbdc00c7b7b00fe 100644 (file)
@@ -30,6 +30,31 @@ public class AltosGreatCircle {
        static final double rad = Math.PI / 180;
        static final double earth_radius = 6371.2 * 1000;       /* in meters */
 
+    static int BEARING_LONG = 0;
+    static int BEARING_SHORT = 1;
+    static int BEARING_VOICE = 2;
+    String bearing_words(int length) {
+        String [][] bearing_string = {
+          {
+            "North", "North North East", "North East", "East North East",
+            "East", "East South East", "South East", "South South East",
+            "South", "South South West", "South West", "West South West",
+            "West", "West North West", "North West", "North North West"
+          }, {
+            "N", "NNE", "NE", "ENE",
+            "E", "ESE", "SE", "SSE",
+            "S", "SSW", "SW", "WSW",
+            "W", "WNW", "NW", "NNW"
+          }, {
+            "north", "nor nor east", "north east", "east nor east",
+            "east", "east sow east", "south east", "sow sow east",
+            "south", "sow sow west", "south west", "west sow west",
+            "west", "west nor west", "north west", "nor nor west "
+          }
+        };
+        return bearing_string[length][(int)((bearing / 90 * 8 + 1) / 2)%16];
+    }
+
        public AltosGreatCircle (double start_lat, double start_lon,
                                 double end_lat, double end_lon)
        {