diff options
-rw-r--r-- | src/ProjectionLSQ.H | 1 | ||||
-rw-r--r-- | src/ProjectionLSQ.cxx | 10 | ||||
-rw-r--r-- | src/Stitch.cxx | 2 | ||||
-rw-r--r-- | src/lsq_rectilinear.mac | 29 |
4 files changed, 33 insertions, 9 deletions
diff --git a/src/ProjectionLSQ.H b/src/ProjectionLSQ.H index 44cc91d..d937114 100644 --- a/src/ProjectionLSQ.H +++ b/src/ProjectionLSQ.H @@ -17,6 +17,7 @@ class ProjectionLSQ { int lsq(const Hills *m, ViewParams *parms, int distortion_correct); protected: + static double pi; double sec(double a); public: diff --git a/src/ProjectionLSQ.cxx b/src/ProjectionLSQ.cxx index cdf9f04..461f36e 100644 --- a/src/ProjectionLSQ.cxx +++ b/src/ProjectionLSQ.cxx @@ -17,7 +17,7 @@ #include "ProjectionLSQ.H" -static double pi_d = asin(1.0) * 2.0; +double ProjectionLSQ::pi = asin(1.0) * 2.0; ProjectionLSQ::ProjectionLSQ() { } @@ -238,10 +238,10 @@ ProjectionLSQ::get_coordinates(double alph, double a_nick, const ViewParams *parms, double *x, double *y) { // Normalize alph - parms->a_center to [-pi/2, pi/2] - if (alph - parms->a_center > pi_d) { - alph -= 2.0 * pi_d; - } else if (alph - parms->a_center < -pi_d) { - alph += 2.0 * pi_d; + if (alph - parms->a_center > pi) { + alph -= 2.0 * pi; + } else if (alph - parms->a_center < -pi) { + alph += 2.0 * pi; } *x = mac_x(parms->a_center, parms->a_nick, parms->a_tilt, parms->scale, diff --git a/src/Stitch.cxx b/src/Stitch.cxx index e4f3d60..aa3798b 100644 --- a/src/Stitch.cxx +++ b/src/Stitch.cxx @@ -109,7 +109,7 @@ Stitch::resample(GipfelWidget::sample_mode_t m, } for (int y = 0; y < h; y++) { - double a_nick = atan((double)(y_off - y)/radius); + double a_nick = (double)20.0 - y * step_view; for (int x = 0; x < w; x++) { double a_view; diff --git a/src/lsq_rectilinear.mac b/src/lsq_rectilinear.mac index a06670d..e439d09 100644 --- a/src/lsq_rectilinear.mac +++ b/src/lsq_rectilinear.mac @@ -2,14 +2,37 @@ * rectilinear (pinhole) projection model with distortion correction */ +c_x : cos(m_nick) * cos(m_view-c_view)$ +c_y : cos(m_nick) * sin(m_view-c_view)$ +c_z : sin(m_nick)$ + +/* +c_x_rot1 : cos(c_view) * c_x - sin(c_view) * c_y$ +c_y_rot1 : sin(c_view) * c_x + cos(c_view) * c_y$ +c_z_rot1 : c_z$ + +c_x_rot2 : c_x_rot1$ +c_y_rot2 : cos(c_nick) * c_y_rot1 - sin(c_nick) * c_z_rot1$ +c_z_rot2 : sin(c_nick) * c_y_rot1 - cos(c_nick) * c_z_rot1$ + +c_x_rot2 : cos(c_nick) * c_x_rot1$ + sin(c_nick) * c_z_rot1$ +c_y_rot2 : c_y_rot1$ +c_z_rot2 : -sin(c_nick) * c_x_rot1 + cos(c_nick) * c_z_rot1$ +*/ + +a_h : c_nick - (\pi/2 - acos(c_z))$ +a_v : atan(c_y / c_x)$ + + /* angle over horizon in view direction */ -a_h : atan (tan (m_nick) / cos(m_view - c_view))$ +/* a_h : atan (tan (m_nick) * sqrt(tan(m_view - c_view) ^2 + 1))$ */ /* adjust angle according to nick value */ -a_v : atan(cos(c_nick + a_h) * tan(m_view - c_view) / cos(a_h))$ +/* a_v : atan(cos(c_nick - a_h ) * tan((m_view - c_view) / cos(a_h)))$ */ +/* a_v : m_view - c_view$ */ x : tan(a_v)$ -y : tan(c_nick - a_h)$ +y : tan(a_h)$ x_rot : y * sin(c_tilt) + x * cos(c_tilt)+x0$ y_rot : y * cos(c_tilt) - x * sin(c_tilt)$ d : x_rot ^ 2 + y_rot ^ 2$ |