]> git.mxchange.org Git - simgear.git/blobdiff - simgear/ephemeris/moonpos.cxx
Merge branch 'next' of git.mxchange.org:/var/cache/git/repos/simgear into next
[simgear.git] / simgear / ephemeris / moonpos.cxx
index 07c4e790436c7d36d4570e18473f71143c2f553e..7908fa89cca3d1ca9df003cf0cfbbb5bf43396d6 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Library General Public License for more details.
  *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA  02111-1307, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
  * $Id$
  **************************************************************************/
 #include <string.h>
 
 #include <simgear/debug/logstream.hxx>
-#include <simgear/misc/fgpath.hxx>
 
-#ifdef __BORLANDC__
-#  define exception c_exception
-#endif
 #include <math.h>
 
 // #include <FDM/flight.hxx>
@@ -92,7 +87,7 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
 
   // calculate the angle between ecliptic and equatorial coordinate system
   // in Radians
-  ecl = ((DEG_TO_RAD * 23.4393) - (DEG_TO_RAD * 3.563E-7) * actTime);  
+  ecl = ((SGD_DEGREES_TO_RADIANS * 23.4393) - (SGD_DEGREES_TO_RADIANS * 3.563E-7) * actTime);  
   eccAnom = sgCalcEccAnom(M, e);  // Calculate the eccentric anomaly
   xv = a * (cos(eccAnom) - e);
   yv = a * (sqrt(1.0 - e*e) * sin(eccAnom));
@@ -116,7 +111,7 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
   D = Lm - Ls;
   F = Lm - N;
   
-  lonEcl += DEG_TO_RAD * (-1.274 * sin (M - 2*D)
+  lonEcl += SGD_DEGREES_TO_RADIANS * (-1.274 * sin (M - 2*D)
                          +0.658 * sin (2*D)
                          -0.186 * sin(ourSun->getM())
                          -0.059 * sin(2*M - 2*D)
@@ -129,7 +124,7 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
                          -0.015 * sin(2*F - 2*D)
                          +0.011 * sin(M - 4*D)
                          );
-  latEcl += DEG_TO_RAD * (-0.173 * sin(F-2*D)
+  latEcl += SGD_DEGREES_TO_RADIANS * (-0.173 * sin(F-2*D)
                          -0.055 * sin(M - F - 2*D)
                          -0.046 * sin(M + F - 2*D)
                          +0.033 * sin(F + 2*D)
@@ -138,7 +133,7 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
   r += (-0.58 * cos(M - 2*D)
        -0.46 * cos(2*D)
        );
-  // FG_LOG(FG_GENERAL, FG_INFO, "Running moon update");
+  // SG_LOG(SG_GENERAL, SG_INFO, "Running moon update");
   xg = r * cos(lonEcl) * cos(latEcl);
   yg = r * sin(lonEcl) * cos(latEcl);
   zg = r *               sin(latEcl);
@@ -150,9 +145,9 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
   geoRa  = atan2(ye, xe);
   geoDec = atan2(ze, sqrt(xe*xe + ye*ye));
 
-  /* FG_LOG( FG_GENERAL, FG_INFO, 
-         "(geocentric) geoRa = (" << (RAD_TO_DEG * geoRa) 
-         << "), geoDec= (" << (RAD_TO_DEG * geoDec) << ")" ); */
+  /* SG_LOG( SG_GENERAL, SG_INFO, 
+         "(geocentric) geoRa = (" << (SGD_RADIANS_TO_DEGREES * geoRa) 
+         << "), geoDec= (" << (SGD_RADIANS_TO_DEGREES * geoDec) << ")" ); */
 
 
   // Given the moon's geocentric ra and dec, calculate its 
@@ -162,30 +157,40 @@ void MoonPos::updatePosition(double mjd, double lst, double lat, Star *ourSun)
   // First calculate the moon's parrallax, that is, the apparent size of the 
   // (equatorial) radius of the earth, as seen from the moon 
   mpar = asin ( 1 / r);
-  // FG_LOG( FG_GENERAL, FG_INFO, "r = " << r << " mpar = " << mpar );
-  // FG_LOG( FG_GENERAL, FG_INFO, "lat = " << f->get_Latitude() );
+  // SG_LOG( SG_GENERAL, SG_INFO, "r = " << r << " mpar = " << mpar );
+  // SG_LOG( SG_GENERAL, SG_INFO, "lat = " << f->get_Latitude() );
 
   gclat = lat - 0.003358 * 
-      sin (2 * DEG_TO_RAD * lat );
-  // FG_LOG( FG_GENERAL, FG_INFO, "gclat = " << gclat );
+      sin (2 * SGD_DEGREES_TO_RADIANS * lat );
+  // SG_LOG( SG_GENERAL, SG_INFO, "gclat = " << gclat );
 
-  rho = 0.99883 + 0.00167 * cos(2 * DEG_TO_RAD * lat);
-  // FG_LOG( FG_GENERAL, FG_INFO, "rho = " << rho );
+  rho = 0.99883 + 0.00167 * cos(2 * SGD_DEGREES_TO_RADIANS * lat);
+  // SG_LOG( SG_GENERAL, SG_INFO, "rho = " << rho );
   
   if (geoRa < 0)
-    geoRa += (2*SG_PI);
+    geoRa += SGD_2PI;
   
   HA = lst - (3.8197186 * geoRa);
-  /* FG_LOG( FG_GENERAL, FG_INFO, "t->getLst() = " << t->getLst() 
+  /* SG_LOG( SG_GENERAL, SG_INFO, "t->getLst() = " << t->getLst() 
          << " HA = " << HA ); */
 
   g = atan (tan(gclat) / cos ((HA / 3.8197186)));
-  // FG_LOG( FG_GENERAL, FG_INFO, "g = " << g );
+  // SG_LOG( SG_GENERAL, SG_INFO, "g = " << g );
 
   rightAscension = geoRa - mpar * rho * cos(gclat) * sin(HA) / cos (geoDec);
-  declination = geoDec - mpar * rho * sin (gclat) * sin (g - geoDec) / sin(g);
-
-  /* FG_LOG( FG_GENERAL, FG_INFO, 
-         "Ra = (" << (RAD_TO_DEG *rightAscension) 
-         << "), Dec= (" << (RAD_TO_DEG *declination) << ")" ); */
+  if (fabs(lat) > 0) {
+      declination
+         = geoDec - mpar * rho * sin (gclat) * sin (g - geoDec) / sin(g);
+  } else {
+      declination = geoDec;
+      // cerr << "Geocentric vs. Topocentric position" << endl;
+      // cerr << "RA (difference)  : "
+      //      << SGD_RADIANS_TO_DEGREES * (geoRa - rightAscension) << endl;
+      // cerr << "Dec (difference) : "
+      //      << SGD_RADIANS_TO_DEGREES * (geoDec - declination) << endl;
+  }
+
+  /* SG_LOG( SG_GENERAL, SG_INFO, 
+         "Ra = (" << (SGD_RADIANS_TO_DEGREES *rightAscension) 
+         << "), Dec= (" << (SGD_RADIANS_TO_DEGREES *declination) << ")" ); */
 }