summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Panorama.H2
-rw-r--r--src/Panorama.cxx27
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;