diff options
| author | Anthony Towns <aj@erisian.com.au> | 2010-11-11 15:57:52 +1000 | 
|---|---|---|
| committer | Anthony Towns <aj@erisian.com.au> | 2010-11-11 15:57:52 +1000 | 
| commit | cc0a730de093c49be2a921101d27622b6f592e92 (patch) | |
| tree | ab755b3db0f9261d0c98a65ba1d92769e5c00447 | |
| parent | 317ec72a34906faad88c6924e634617b074e71db (diff) | |
add compass bearing to voice output
| -rw-r--r-- | ao-tools/altosui/AltosDisplayThread.java | 4 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosGreatCircle.java | 25 | 
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)  	{  | 
