diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Panorama.H | 2 | ||||
-rw-r--r-- | src/Panorama.cxx | 27 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/Panorama.H b/src/Panorama.H index 651fe8e..cb7dff7 100644 --- a/src/Panorama.H +++ b/src/Panorama.H @@ -41,7 +41,7 @@ class Panorama { double alpha(double phi, double lam); - double nick(double dist, double height); + double nick(Hill *m); double comp_center_angle(double alph_a, double alph_b, double d1, double d2); diff --git a/src/Panorama.cxx b/src/Panorama.cxx index 1e3015a..b1d42d3 100644 --- a/src/Panorama.cxx +++ b/src/Panorama.cxx @@ -328,7 +328,7 @@ Panorama::update_angles() { if (m->phi != view_phi || m->lam != view_lam) { m->alph = alpha(m->phi, m->lam); - m->a_nick = nick(m->dist, m->height); + m->a_nick = nick(m); } } @@ -394,7 +394,7 @@ Panorama::update_close_mountains() { if (m->flags & Hill::TRACK_POINT || ((m->phi != view_phi || m->lam != view_lam) && - (m->height / (m->dist * get_earth_radius(m->phi)) + (m->height / (m->dist * EARTH_RADIUS) > height_dist_ratio))) { close_mountains->add(m); @@ -456,29 +456,40 @@ Panorama::alpha(double phi, double lam) { double -Panorama::nick(double dist, double height) { +Panorama::nick(Hill *m) { double a, b, c; double beta; - b = height + get_earth_radius(view_phi); + b = m->height + get_earth_radius(m->phi); c = view_height + get_earth_radius(view_phi); - a = pow(((b * (b - (2.0 * c * cos(dist)))) + (c * c)), (1.0 / 2.0)); + a = pow(((b * (b - (2.0 * c * cos(m->dist)))) + (c * c)), (1.0 / 2.0)); beta = acos((-(b*b) + (a*a) + (c*c))/(2 * a * c)); return beta - pi_d / 2.0; } +// return local distance to center of WGS84 ellipsoid double -Panorama::get_earth_radius(double latitude) { - return EARTH_RADIUS; +Panorama::get_earth_radius(double phi) { + double a = 6378137.000; + double b = 6356752.315; + double x, y, r; + + x = a*b*pow(pow(a,2)*pow(tan(phi),2)+pow(b,2),-1.0/2.0); + y = a*b*tan(phi)*pow(pow(a,2)*pow(tan(phi),2)+pow(b,2),-1.0/2.0); + + r = sqrt(pow(x, 2) + pow(y, 2)); + + fprintf(stderr, "==> %f %f %f %f\n", phi, x, y, r); + return r; } double Panorama::get_real_distance(Hill *m) { double a, b, c, gam; - a = view_height + get_earth_radius(m->phi); + a = view_height + get_earth_radius(view_phi); b = m->height + get_earth_radius(m->phi); gam = m->dist; |