diff options
author | Keith Packard <keithp@keithp.com> | 2013-04-11 23:56:47 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-04-11 23:58:56 -0700 |
commit | f02bb1df132443fc27b69f23f382ea87e610f533 (patch) | |
tree | 885c5009e93740294734e74cefc17a8e1f25d392 /altoslib/AltosGreatCircle.java | |
parent | 9a8cc23de5776ea3fa2bdc96cbe63422eb555d63 (diff) |
altoslib: Add range and elevation to AltosGreatCircle
Move the computations from AltosState here so they can be re-used elsewhere.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosGreatCircle.java')
-rw-r--r-- | altoslib/AltosGreatCircle.java | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index 921356a5..f1cf0ae9 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -22,6 +22,8 @@ import java.lang.Math; public class AltosGreatCircle { public double distance; public double bearing; + public double range; + public double elevation; double sqr(double a) { return a * a; } @@ -54,9 +56,8 @@ public class AltosGreatCircle { 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) - { + public AltosGreatCircle (double start_lat, double start_lon, double start_alt, + double end_lat, double end_lon, double end_alt) { double lat1 = rad * start_lat; double lon1 = rad * -start_lon; double lat2 = rad * end_lat; @@ -88,14 +89,25 @@ public class AltosGreatCircle { } distance = d * earth_radius; bearing = course * 180/Math.PI; + + double height_diff = end_alt - start_alt; + range = Math.sqrt(distance * distance + height_diff * height_diff); + elevation = Math.atan2(height_diff, distance) * 180 / Math.PI; + } + + public AltosGreatCircle (double start_lat, double start_lon, + double end_lat, double end_lon) { + this(start_lat, start_lon, 0, end_lat, end_lon, 0); } public AltosGreatCircle(AltosGPS start, AltosGPS end) { - this(start.lat, start.lon, end.lat, end.lon); + this(start.lat, start.lon, start.alt, end.lat, end.lon, end.alt); } public AltosGreatCircle() { distance = 0; bearing = 0; + range = 0; + elevation = 0; } } |