1 // constants.h -- various constant definitions 2 // 3 // Written by Curtis Olson, started February 2000. 4 // Last change by Eric van den Berg, Feb 2013 5 // 6 // Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt/ 7 // 8 // This library is free software; you can redistribute it and/or 9 // modify it under the terms of the GNU Library General Public 10 // License as published by the Free Software Foundation; either 11 // version 2 of the License, or (at your option) any later version. 12 // 13 // This library is distributed in the hope that it will be useful, 14 // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 // Library General Public License for more details. 17 // 18 // You should have received a copy of the GNU General Public License 19 // along with this program; if not, write to the Free Software 20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 // 22 // $Id$ 23 24 /** \file constants.h 25 * Various constant definitions. 26 */ 27 28 29 #ifndef _SG_CONSTANTS_H 30 #define _SG_CONSTANTS_H 31 32 33 #include <simgear/compiler.h> 34 35 #include <cmath> 36 37 38 // Make sure PI is defined in its various forms 39 40 #ifndef SGD_PI // remove me once FlightGear no longer uses PLIB 41 42 #ifdef M_PI 43 const double SGD_PI = M_PI; 44 const float SG_PI = M_PI; 45 #else 46 const float SG_PI = 3.1415926535f; 47 const double SGD_PI = 3.1415926535; 48 #endif 49 50 #endif // of PLIB-SG guard 51 52 /** 2 * PI */ 53 const double SGD_2PI = SGD_PI * 2.0; 54 55 /** PI / 2 */ 56 #ifdef M_PI_2 57 # define SGD_PI_2 M_PI_2 58 #else 59 # define SGD_PI_2 1.57079632679489661923 60 #endif 61 62 /** PI / 4 */ 63 const double SGD_PI_4 = 0.78539816339744830961; 64 65 #ifndef SGD_DEGREES_TO_RADIANS // // remove me once FlightGear no longer uses PLIB 66 67 const double SGD_DEGREES_TO_RADIANS = SGD_PI / 180.0; 68 const double SGD_RADIANS_TO_DEGREES = 180.0 / SGD_PI; 69 70 const float SG_DEGREES_TO_RADIANS = SG_PI / 180.0f; 71 const float SG_RADIANS_TO_DEGREES = 180.0f / SG_PI; 72 73 #endif // of PLIB-SG guard 74 75 /** \def SG_E "e" */ 76 #ifdef M_E 77 # define SG_E M_E 78 #else 79 # define SG_E 2.7182818284590452354 80 #endif 81 82 /** pi/180/60/60, or about 100 feet at earths' equator */ 83 #define SG_ONE_SECOND 4.848136811E-6 84 85 86 /** Radius of Earth in kilometers at the equator. Another source had 87 * 6378.165 but this is probably close enough */ 88 #define SG_EARTH_RAD 6378.155 89 90 // Maximum terrain elevation from sea level 91 #define SG_MAX_ELEVATION_M 9000.0 92 93 // Earth parameters for WGS 84, taken from LaRCsim/ls_constants.h 94 95 /** Value of earth radius from LaRCsim (ft) */ 96 #define SG_EQUATORIAL_RADIUS_FT 20925650. 97 98 /** Value of equatorial earth radius from LaRCsim (meter) */ 99 #define SG_EQUATORIAL_RADIUS_M 6378138.12 100 101 /** Radius squared (ft) */ 102 #define SG_EQ_RAD_SQUARE_FT 437882827922500. 103 104 /** Radius squared (meter) */ 105 #define SG_EQ_RAD_SQUARE_M 40680645877797.1344 106 107 /** Value of WGS84 polar earth radius (meter) */ 108 #define SG_POLAR_RADIUS_M 6356752.3142451794975639668 109 110 // Physical Constants, SI 111 112 /**mean gravity on earth */ 113 #define SG_g0_m_p_s2 9.80665 // m/s2 114 115 /**standard pressure at SL */ 116 #define SG_p0_Pa 101325.0 // Pa 117 118 /**standard density at SL */ 119 #define SG_rho0_kg_p_m3 1.225 // kg/m3 120 121 /**standard temperature at SL */ 122 #define SG_T0_K 288.15 // K (=15degC) 123 124 /**specific gas constant of air*/ 125 #define SG_R_m2_p_s2_p_K 287.05 // m2/s2/K 126 127 /**specific heat constant at constant pressure*/ 128 #define SG_cp_m2_p_s2_p_K 1004.68 // m2/s2/K 129 130 /**ratio of specific heats of air*/ 131 #define SG_gamma 1.4 // =cp/cv (cp = 1004.68 m2/s2 K , cv = 717.63 m2/s2 K) 132 133 /**constant beta used to calculate dynamic viscosity */ 134 #define SG_beta_kg_p_sm_sqrK 1.458e-06 // kg/s/m/SQRT(K) 135 136 /** Sutherland constant */ 137 #define SG_S_K 110.4 // K 138 139 140 // Conversions 141 142 /** Arc seconds to radians. (arcsec*pi)/(3600*180) = rad */ 143 #define SG_ARCSEC_TO_RAD 4.84813681109535993589e-06 144 145 /** Radians to arc seconds. (rad*3600*180)/pi = arcsec */ 146 #define SG_RAD_TO_ARCSEC 206264.806247096355156 147 148 /** Feet to Meters */ 149 #define SG_FEET_TO_METER 0.3048 150 151 /** Meters to Feet */ 152 #define SG_METER_TO_FEET 3.28083989501312335958 153 154 /** Meters to Nautical Miles. 1 nm = 6076.11549 feet */ 155 #define SG_METER_TO_NM 0.0005399568034557235 156 157 /** Nautical Miles to Meters */ 158 #define SG_NM_TO_METER 1852.0000 159 160 /** Meters to Statute Miles. */ 161 #define SG_METER_TO_SM 0.0006213699494949496 162 163 /** Statute Miles to Meters. */ 164 #define SG_SM_TO_METER 1609.3412196 165 166 /** Radians to Nautical Miles. 1 nm = 1/60 of a degree */ 167 #define SG_NM_TO_RAD 0.00029088820866572159 168 169 /** Nautical Miles to Radians */ 170 #define SG_RAD_TO_NM 3437.7467707849392526 171 172 /** meters per second to Knots */ 173 #define SG_MPS_TO_KT 1.9438444924406046432 174 175 /** Knots to meters per second */ 176 #define SG_KT_TO_MPS 0.5144444444444444444 177 178 /** Feet per second to Knots */ 179 #define SG_FPS_TO_KT 0.5924838012958962841 180 181 /** Knots to Feet per second */ 182 #define SG_KT_TO_FPS 1.6878098571011956874 183 184 /** meters per second to Miles per hour */ 185 #define SG_MPS_TO_MPH 2.2369362920544020312 186 187 /** meetrs per hour to Miles per second */ 188 #define SG_MPH_TO_MPS 0.44704 189 190 /** Meters per second to Kilometers per hour */ 191 #define SG_MPS_TO_KMH 3.6 192 193 /** Kilometers per hour to meters per second */ 194 #define SG_KMH_TO_MPS 0.2777777777777777778 195 196 /** Pascal to Inch Mercury */ 197 #define SG_PA_TO_INHG 0.0002952998330101010 198 199 /** Inch Mercury to Pascal */ 200 #define SG_INHG_TO_PA 3386.388640341 201 202 /** slug/ft3 to kg/m3 */ 203 #define SG_SLUGFT3_TO_KGPM3 515.379 204 205 206 /** For divide by zero avoidance, this will be close enough to zero */ 207 #define SG_EPSILON 0.0000001 208 209 /** Highest binobj format version we know how to read/write. This starts at 210 * 0 and can go up to 65535 */ 211 #define SG_BINOBJ_VERSION 6 212 213 /** for backwards compatibility */ 214 #define SG_SCENERY_FILE_FORMAT "0.4" 215 216 /** Default object ranges. Overridden by /sim/rendering/static-lod/[bare|rough|detailed] **/ 217 #define SG_OBJECT_RANGE_BARE 30000.0 218 #define SG_OBJECT_RANGE_ROUGH 9000.0 219 #define SG_OBJECT_RANGE_DETAILED 1500.0 220 221 /** Minimum expiry time of PagedLOD within the Tile. Overridden by /sim/rendering/plod-minimum-expiry-time-secs **/ 222 #define SG_TILE_MIN_EXPIRY 180.0 223 224 /** Radius of scenery tiles in m **/ 225 #define SG_TILE_RADIUS 14000.0 226 227 #endif // _SG_CONSTANTS_H 228