//
// Written by Curtis Olson, started February 2000.
//
-// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
+// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt/
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// 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 <simgear/compiler.h>
-#ifdef SG_HAVE_STD_INCLUDES
-# include <cmath>
-#else
-# ifdef SG_MATH_EXCEPTION_CLASH
-# define exception C_exception
-# endif
-# include <math.h>
-#endif
-
-#include <plib/sg.h>
+#include <cmath>
// Make sure PI is defined in its various forms
-// SG_PI and SGD_PI (float and double) come from plib/sg.h
+#ifndef SGD_PI // remove me once FlightGear no longer uses PLIB
+
+#ifdef M_PI
+const double SGD_PI = M_PI;
+const float SG_PI = M_PI;
+#else
+const float SG_PI = 3.1415926535f;
+const double SGD_PI = 3.1415926535;
+#endif
+
+#endif // of PLIB-SG guard
/** 2 * PI */
-#define SGD_2PI 6.28318530717958647692
+const double SGD_2PI = SGD_PI * 2.0;
/** PI / 2 */
#ifdef M_PI_2
#endif
/** PI / 4 */
-#define SGD_PI_4 0.78539816339744830961
+const double SGD_PI_4 = 0.78539816339744830961;
+
+#ifndef SGD_DEGREES_TO_RADIANS // // remove me once FlightGear no longer uses PLIB
+
+const double SGD_DEGREES_TO_RADIANS = SGD_PI / 180.0;
+const double SGD_RADIANS_TO_DEGREES = 180.0 / SGD_PI;
+
+const float SG_DEGREES_TO_RADIANS = SG_PI / 180.0f;
+const float SG_RADIANS_TO_DEGREES = 180.0f / SG_PI;
+
+#endif // of PLIB-SG guard
/** \def SG_E "e" */
#ifdef M_E
* 6378.165 but this is probably close enough */
#define SG_EARTH_RAD 6378.155
+// Maximum terrain elevation from sea level
+#define SG_MAX_ELEVATION_M 9000.0
// Earth parameters for WGS 84, taken from LaRCsim/ls_constants.h
#define SG_METER_TO_FEET 3.28083989501312335958
/** Meters to Nautical Miles. 1 nm = 6076.11549 feet */
-#define SG_METER_TO_NM 0.00053995680
+#define SG_METER_TO_NM 0.0005399568034557235
/** Nautical Miles to Meters */
#define SG_NM_TO_METER 1852.0000
+/** Meters to Statute Miles. */
+#define SG_METER_TO_SM 0.0006213699494949496
+
+/** Statute Miles to Meters. */
+#define SG_SM_TO_METER 1609.3412196
+
/** Radians to Nautical Miles. 1 nm = 1/60 of a degree */
#define SG_NM_TO_RAD 0.00029088820866572159
/** Nautical Miles to Radians */
#define SG_RAD_TO_NM 3437.7467707849392526
+/** meters per second to Knots */
+#define SG_MPS_TO_KT 1.9438444924406046432
+
+/** Knots to meters per second */
+#define SG_KT_TO_MPS 0.5144444444444444444
+
+/** Feet per second to Knots */
+#define SG_FPS_TO_KT 0.5924838012958962841
+
+/** Knots to Feet per second */
+#define SG_KT_TO_FPS 1.6878098571011956874
+
+/** meters per second to Miles per hour */
+#define SG_MPS_TO_MPH 2.2369362920544020312
+
+/** meetrs per hour to Miles per second */
+#define SG_MPH_TO_MPS 0.44704
+
+/** Meters per second to Kilometers per hour */
+#define SG_MPS_TO_KMH 3.6
+
+/** Kilometers per hour to meters per second */
+#define SG_KMH_TO_MPS 0.2777777777777777778
+
+/** Pascal to Inch Mercury */
+#define SG_PA_TO_INHG 0.0002952998330101010
+
+/** Inch Mercury to Pascal */
+#define SG_INHG_TO_PA 3386.388640341
+
+
/** For divide by zero avoidance, this will be close enough to zero */
#define SG_EPSILON 0.0000001
-
/** Highest binobj format version we know how to read/write. This starts at
* 0 and can go up to 65535 */
#define SG_BINOBJ_VERSION 6