summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Towns <aj@erisian.com.au>2010-11-11 15:57:52 +1000
committerAnthony Towns <aj@erisian.com.au>2010-11-11 15:57:52 +1000
commitcc0a730de093c49be2a921101d27622b6f592e92 (patch)
treeab755b3db0f9261d0c98a65ba1d92769e5c00447
parent317ec72a34906faad88c6924e634617b074e71db (diff)
add compass bearing to voice output
-rw-r--r--ao-tools/altosui/AltosDisplayThread.java4
-rw-r--r--ao-tools/altosui/AltosGreatCircle.java25
2 files changed, 28 insertions, 1 deletions
diff --git a/ao-tools/altosui/AltosDisplayThread.java b/ao-tools/altosui/AltosDisplayThread.java
index b5b2777e..375965b9 100644
--- a/ao-tools/altosui/AltosDisplayThread.java
+++ b/ao-tools/altosui/AltosDisplayThread.java
@@ -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));
diff --git a/ao-tools/altosui/AltosGreatCircle.java b/ao-tools/altosui/AltosGreatCircle.java
index 07c02c16..aa6ae3b9 100644
--- a/ao-tools/altosui/AltosGreatCircle.java
+++ b/ao-tools/altosui/AltosGreatCircle.java
@@ -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)
{