]> git.mxchange.org Git - flightgear.git/commitdiff
More use of SGGeo[dc].
authorfrohlich <frohlich>
Thu, 15 Jun 2006 08:29:43 +0000 (08:29 +0000)
committerfrohlich <frohlich>
Thu, 15 Jun 2006 08:29:43 +0000 (08:29 +0000)
13 files changed:
src/AIModel/AIAircraft.cxx
src/AIModel/AIBallistic.cxx
src/AIModel/AIBallistic.hxx
src/AIModel/AIBase.cxx
src/AIModel/AIBase.hxx
src/AIModel/AICarrier.cxx
src/AIModel/AICarrier.hxx
src/AIModel/AIMultiplayer.cxx
src/AIModel/AIShip.cxx
src/AIModel/AIStorm.cxx
src/AIModel/AIThermal.cxx
src/FDM/SP/ACMS.cxx
src/Network/multiplay.cxx

index 5c560d9bcd4209b7b7a2cb07fcadd8b0d0d6ec19..6062f8dbe2da6ddcdead61dba48d0274a1ec757b 100644 (file)
@@ -180,7 +180,7 @@ void FGAIAircraft::Run(double dt) {
                 doGroundAltitude();
                 //cerr << " Actual altitude " << altitude << endl;
                 // Transform();
-                pos.setelev(altitude * SG_FEET_TO_METER);
+                pos.setElevationFt(altitude);
             }
             return;
         }
@@ -219,8 +219,8 @@ void FGAIAircraft::Run(double dt) {
                           * speed * 1.686 / ft_per_deg_lon;
 
     // set new position
-    pos.setlat( pos.lat() + speed_north_deg_sec * dt);
-    pos.setlon( pos.lon() + speed_east_deg_sec * dt);
+    pos.setLatitudeDeg( pos.getLatitudeDeg() + speed_north_deg_sec * dt);
+    pos.setLongitudeDeg( pos.getLongitudeDeg() + speed_east_deg_sec * dt); 
     //if (!(finite(pos.lat()) && finite(pos.lon())))
     //  {
     //    cerr << "Position is not finite" << endl;
@@ -361,7 +361,7 @@ void FGAIAircraft::Run(double dt) {
 
     // adjust altitude (meters) based on current vertical speed (fpm)
     altitude += vs / 60.0 * dt;
-    pos.setelev(altitude * SG_FEET_TO_METER);
+    pos.setElevationFt(altitude);  
     double altitude_ft = altitude;
 
     // adjust target Altitude, based on ground elevation when on ground
@@ -564,7 +564,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
         if (curr->crossat > -1000.0) { //use a calculated descent/climb rate
             use_perf_vs = false;
             tgt_vs = (curr->crossat - prev->altitude)
-                    / (fp->getDistanceToGo(pos.lat(), pos.lon(), curr)
+                    / (fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr)
                     / 6076.0 / prev->speed*60.0);
             tgt_altitude = curr->crossat;
         } else {
@@ -597,7 +597,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
         dt_count = 0;
     }
     // check to see if we've reached the lead point for our next turn
-    double dist_to_go = fp->getDistanceToGo(pos.lat(), pos.lon(), curr);
+    double dist_to_go = fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr);
 
     //cerr << "2" << endl;
     double lead_dist = fp->getLeadDistance();
@@ -666,7 +666,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
             double userLatitude  = fgGetDouble("/position/latitude-deg");
             double userLongitude = fgGetDouble("/position/longitude-deg");
             double course, distance;
-            SGWayPoint current (pos.lon(), pos.lat(), 0);
+            SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
             SGWayPoint user (userLongitude, userLatitude, 0);
             user.CourseAndDistance(current, &course, &distance);
             if ((distance * SG_METER_TO_NM) > TRAFFICTOAIDIST) {
@@ -736,7 +736,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
             if (curr->crossat > -1000.0) {
                 //cerr << "5.1a" << endl;
                 use_perf_vs = false;
-                tgt_vs = (curr->crossat - altitude) / (fp->getDistanceToGo(pos.lat(), pos.lon(), curr)
+                tgt_vs = (curr->crossat - altitude) / (fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr)
                         / 6076.0 / speed*60.0);
                 //cerr << "5.1b" << endl;
                 tgt_altitude = curr->crossat;
@@ -757,7 +757,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
         //cout << "  Target heading:  " << tgt_heading << endl << endl;
 
     } else {
-        double calc_bearing = fp->getBearing(pos.lat(), pos.lon(), curr);
+        double calc_bearing = fp->getBearing(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr);
         //cerr << "Bearing = " << calc_bearing << endl;
         if (speed < 0) {
             calc_bearing +=180;
@@ -774,7 +774,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
         } else {
             cerr << "calc_bearing is not a finite number : "
                  << "Speed " << speed
-                 << "pos : " << pos.lat() << ", " << pos.lon()
+                 << "pos : " << pos.getLatitudeDeg() << ", " << pos.getLongitudeDeg()
                  << "waypoint " << curr->latitude << ", " << curr->longitude << endl;
             cerr << "waypoint name " << curr->name;
             exit(1);  // FIXME
@@ -924,7 +924,7 @@ void FGAIAircraft::getGroundElev(double dt) {
 
         //Point3D currView(vw->getLongitude_deg(),
         //                 vw->getLatitude_deg(), 0.0);
-        SGWayPoint current (pos.lon(), pos.lat(), 0);
+        SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
         SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
         view.CourseAndDistance(current, &course, &distance);
         if(distance > visibility_meters) {
@@ -934,14 +934,14 @@ void FGAIAircraft::getGroundElev(double dt) {
 
         // FIXME: make sure the pos.lat/pos.lon values are in degrees ...
         double range = 500.0;
-        if (!globals->get_tile_mgr()->scenery_available(pos.lat(), pos.lon(), range)) {
+        if (!globals->get_tile_mgr()->scenery_available(pos.getLatitudeDeg(), pos.getLongitudeDeg(), range)) {
             // Try to shedule tiles for that position.
             globals->get_tile_mgr()->update( aip.getSGLocation(), range );
         }
 
         // FIXME: make sure the pos.lat/pos.lon values are in degrees ...
         double alt;
-        if (globals->get_scenery()->get_elevation_m(pos.lat(), pos.lon(), 20000.0, alt, 0))
+        if (globals->get_scenery()->get_elevation_m(pos.getLatitudeDeg(), pos.getLongitudeDeg(), 20000.0, alt, 0))
             tgt_altitude = alt * SG_METER_TO_FEET;
 
         //cerr << "Target altitude : " << tgt_altitude << endl;
index 165eb903a98e6e0a84c3afceea5d38c456d95bbe..a91e440fed092e77edb9a0880f977e983d3555fa 100644 (file)
@@ -169,7 +169,7 @@ void FGAIBallistic::Run(double dt) {
    
    // calculate vertical and horizontal speed components
    vs = sin( pitch * SG_DEGREES_TO_RADIANS ) * speed;
-   hs = cos( pitch * SG_DEGREES_TO_RADIANS ) * speed;
+   double hs = cos( pitch * SG_DEGREES_TO_RADIANS ) * speed;
 
    // convert horizontal speed (fps) to degrees per second
    speed_north_deg_sec = cos(hdg / SG_RADIANS_TO_DEGREES) * hs / ft_per_deg_lat;
@@ -186,15 +186,15 @@ void FGAIBallistic::Run(double dt) {
    wind_speed_from_east_deg_sec  = wind_from_east / ft_per_deg_lon;
    
    // set new position
-   pos.setlat( pos.lat() + (speed_north_deg_sec - wind_speed_from_north_deg_sec) * dt );
-   pos.setlon( pos.lon() + (speed_east_deg_sec - wind_speed_from_east_deg_sec) * dt ); 
+   pos.setLatitudeDeg( pos.getLatitudeDeg() + (speed_north_deg_sec - wind_speed_from_north_deg_sec) * dt );
+   pos.setLongitudeDeg( pos.getLongitudeDeg() + (speed_east_deg_sec - wind_speed_from_east_deg_sec) * dt ); 
 
    // adjust vertical speed for acceleration of gravity and buoyancy
    vs -= (gravity - buoyancy) * dt;
    
    // adjust altitude (feet)
    altitude += vs * dt;
-   pos.setelev(altitude * SG_FEET_TO_METER); 
+   pos.setElevationFt(altitude); 
 
    // recalculate pitch (velocity vector) if aerostabilized
    //   cout << "aero_stabilised " << aero_stabilised  << endl ;
index efa52a557d80ab3f7babda8d20eb1b4794bc6eed..6b5441304f0ba5966c458f9b2c27f92746290e73 100644 (file)
@@ -60,7 +60,6 @@ private:
     double azimuth;         // degrees true
     double elevation;       // degrees
     double rotation;        // degrees
-    double hs;              // horizontal speed (fps)
     bool aero_stabilised;   // if true, object will align wit trajectory
     double drag_area;       // equivalent drag area in ft2
     double life_timer;      // seconds
index 20bc20520c5f63113231d4d151ef5ee4445d4855..8746af4c1048d3ebafa57bb7fa8e5371d75b5b37 100644 (file)
@@ -106,13 +106,13 @@ void FGAIBase::update(double dt) {
     if (_otype == otBallistic)
         CalculateMach();
 
-    ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat()*SGD_DEGREES_TO_RADIANS);
-    ft_per_deg_lon = 365228.16 * cos(pos.lat()*SGD_DEGREES_TO_RADIANS);
+    ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.getLatitudeRad());
+    ft_per_deg_lon = 365228.16 * cos(pos.getLatitudeRad());
 }
 
 void FGAIBase::Transform() {
     if (!invisible) {
-      aip.setPosition(pos.lon(), pos.lat(), pos.elev() * SG_METER_TO_FEET);
+      aip.setPosition(pos);
       if (no_roll) {
          aip.setOrientation(0.0, pitch, hdg);
       } else {
@@ -260,8 +260,8 @@ double FGAIBase::UpdateRadar(FGAIManager* manager)
 
    double user_latitude  = manager->get_user_latitude();
    double user_longitude = manager->get_user_longitude();
-   double lat_range = fabs(pos.lat() - user_latitude) * ft_per_deg_lat;
-   double lon_range = fabs(pos.lon() - user_longitude) * ft_per_deg_lon;
+   double lat_range = fabs(pos.getLatitudeDeg() - user_latitude) * ft_per_deg_lat;
+   double lon_range = fabs(pos.getLongitudeDeg() - user_longitude) * ft_per_deg_lon;
    double range_ft2 = lat_range*lat_range + lon_range*lon_range;
 
    //
@@ -284,16 +284,16 @@ double FGAIBase::UpdateRadar(FGAIManager* manager)
      range = range_ft / 6076.11549;
 
      // calculate bearing to target
-     if (pos.lat() >= user_latitude) {
+     if (pos.getLatitudeDeg() >= user_latitude) {
         bearing = atan2(lat_range, lon_range) * SG_RADIANS_TO_DEGREES;
-        if (pos.lon() >= user_longitude) {
+        if (pos.getLongitudeDeg() >= user_longitude) {
            bearing = 90.0 - bearing;
         } else {
            bearing = 270.0 + bearing;
         }
      } else {
         bearing = atan2(lon_range, lat_range) * SG_RADIANS_TO_DEGREES;
-        if (pos.lon() >= user_longitude) {
+        if (pos.getLongitudeDeg() >= user_longitude) {
            bearing = 180.0 - bearing;
         } else {
            bearing = 180.0 + bearing;
@@ -341,7 +341,8 @@ SGVec3d
 FGAIBase::getCartPosAt(const SGVec3d& _off) const
 {
   // Transform that one to the horizontal local coordinate system.
-  SGQuatd hlTrans = SGQuatd::fromLonLatDeg(pos.lon(), pos.lat());
+  
+  SGQuatd hlTrans = SGQuatd::fromLonLat(pos);
   // and postrotate the orientation of the AIModel wrt the horizontal
   // local frame
   hlTrans *= SGQuatd::fromYawPitchRollDeg(hdg, pitch, roll);
@@ -351,7 +352,7 @@ FGAIBase::getCartPosAt(const SGVec3d& _off) const
   SGVec3d off = hlTrans.backTransform(_off);
 
   // Add the position offset of the AIModel to gain the earth centered position
-  SGVec3d cartPos = SGGeod::fromDegFt(pos.lon(), pos.lat(), pos.elev());
+  SGVec3d cartPos = SGVec3d::fromGeod(pos);
 
   return cartPos + off;
 }
@@ -360,17 +361,17 @@ FGAIBase::getCartPosAt(const SGVec3d& _off) const
  * getters and Setters
  */
 void FGAIBase::_setLongitude( double longitude ) {
-    pos.setlon(longitude);
+    pos.setLongitudeDeg(longitude);
 }
 void FGAIBase::_setLatitude ( double latitude )  {
-    pos.setlat(latitude);
+    pos.setLatitudeDeg(latitude);
 }
 
 double FGAIBase::_getLongitude() const {
-    return pos.lon();
+    return pos.getLongitudeDeg();
 }
 double FGAIBase::_getLatitude () const {
-    return pos.lat();
+    return pos.getLatitudeDeg();
 }
 double FGAIBase::_getRdot() const {
     return rdot;
index c24113445442ec5f3a80b8139a80b8153cfff5ce..d214144861c4608dc5f55142800dbb601272db81 100644 (file)
@@ -48,7 +48,6 @@ public:
 
     FGAIBase(object_type ot);
     virtual ~FGAIBase();
-    inline const Point3D& GetPos() const { return(pos); }
 
     virtual void readFromScenario(SGPropertyNode* scFileNode);
 
@@ -84,7 +83,7 @@ protected:
     FGAIManager* manager;
 
     // these describe the model's actual state
-    Point3D pos;       // WGS84 lat & lon in degrees, elev above sea-level in meters
+    SGGeod pos;        // WGS84 lat & lon in degrees, elev above sea-level in meters
     double hdg;                // True heading in degrees
     double roll;       // degrees, left is negative
     double pitch;      // degrees, nose-down is negative
@@ -205,7 +204,7 @@ inline void FGAIBase::setHeading( double heading ) {
 
 inline void FGAIBase::setAltitude( double altitude_ft ) {
     altitude = tgt_altitude = altitude_ft;
-    pos.setelev(altitude * SG_FEET_TO_METER);
+    pos.setElevationFt(altitude);
 }
 
 inline void FGAIBase::setBank( double bank ) {
@@ -218,10 +217,10 @@ inline void FGAIBase::setPitch( double newpitch ) {
 }
 
 inline void FGAIBase::setLongitude( double longitude ) {
-    pos.setlon( longitude );
+    pos.setLongitudeDeg( longitude );
 }
 inline void FGAIBase::setLatitude ( double latitude ) {
-    pos.setlat( latitude );
+    pos.setLatitudeDeg( latitude );
 }
 
 inline void FGAIBase::setDie( bool die ) { delete_me = die; }
index 3dd427ce01852e53b0fe293bf0487b2675a3fff8..7fa08422b20fcc86864bacfb678d3e250982de03 100644 (file)
@@ -152,14 +152,14 @@ void FGAICarrier::update(double dt) {
     // but by just apply discrete changes at its velocity variables.
     // Update the velocity information stored in those nodes.
     // Transform that one to the horizontal local coordinate system.
-    SGQuatd ec2hl = SGQuatd::fromLonLatDeg(pos.lon(), pos.lat());
+    SGQuatd ec2hl = SGQuatd::fromLonLat(pos);
     // The orientation of the carrier wrt the horizontal local frame
     SGQuatd hl2body = SGQuatd::fromYawPitchRollDeg(hdg, pitch, roll);
     // and postrotate the orientation of the AIModel wrt the horizontal
     // local frame
     SGQuatd ec2body = ec2hl*hl2body;
     // The cartesian position of the carrier in the wgs84 world
-    SGVec3d cartPos = SGGeod::fromDegFt(pos.lon(), pos.lat(), pos.elev());
+    SGVec3d cartPos = SGVec3d::fromGeod(pos);
     // Store for later use by the groundcache
     rot_pivot_wrt_earth = cartPos;
 
@@ -189,7 +189,7 @@ void FGAICarrier::update(double dt) {
       // Now here is the finite difference ...
 
       // Transform that one to the horizontal local coordinate system.
-      SGQuatd ec2hlNew = SGQuatd::fromLonLatDeg(pos.lon(), pos.lat());
+      SGQuatd ec2hlNew = SGQuatd::fromLonLat(pos);
       // compute the new orientation
       SGQuatd hl2bodyNew = SGQuatd::fromYawPitchRollDeg(hdg, pitch, roll);
       // The rotation difference
@@ -287,7 +287,7 @@ bool FGAICarrier::init() {
     turn_to_launch_hdg = false;
     returning = false;
 
-    initialpos = pos;
+    mOpBoxPos = pos;
     base_course = hdg;
     base_speed = speed;
 
@@ -322,9 +322,9 @@ void FGAICarrier::bind() {
     props->tie("controls/base-speed-kts",
                 SGRawValuePointer<double>(&base_speed));
     props->tie("controls/start-pos-lat-deg",
-                SGRawValuePointer<double>(&initialpos[1]));
+               SGRawValueMethods<SGGeod,double>(pos, &SGGeod::getLatitudeDeg));
     props->tie("controls/start-pos-long-deg",
-                SGRawValuePointer<double>(&initialpos[0]));
+               SGRawValueMethods<SGGeod,double>(pos, &SGGeod::getLongitudeDeg));
     props->tie("velocities/speed-kts",
                 SGRawValuePointer<double>(&speed));
     props->tie("environment/surface-wind-speed-true-kts",
@@ -402,7 +402,7 @@ bool FGAICarrier::getParkPosition(const string& id, SGGeod& geodPos,
         if ((*it).name == id || id.empty()) {
             ParkPosition ppos = *it;
             SGVec3d cartPos = getCartPosAt(ppos.offset);
-            geodPos = cartPos;
+            geodPos = SGGeod::fromCart(cartPos);
             hdng = hdg + ppos.heading_deg;
             double shdng = sin(ppos.heading_deg * SGD_DEGREES_TO_RADIANS);
             double chdng = cos(ppos.heading_deg * SGD_DEGREES_TO_RADIANS);
@@ -579,14 +579,14 @@ bool FGAICarrier::mark_cat(ssgEntity* e, const list<string>& cat_objects, bool m
                         // care for transforms ...
                         short v[2];
                         l->getLine(0, v, v+1 );
-                        sgVec3 ends[2];
+                        SGVec3f ends[2];
                         for (int k=0; k<2; ++k)
-                            sgCopyVec3( ends[k], l->getVertex( v[k] ) );
+                            sgCopyVec3( ends[k].sg(), l->getVertex( v[k] ) );
 
                         // When the 1 end is behind the 0 end, swap the coordinates.
                         if (ends[0][0] < ends[1][0]) {
-                            sgCopyVec3( l->getVertex( v[0] ), ends[1] );
-                            sgCopyVec3( l->getVertex( v[1] ), ends[0] );
+                            sgCopyVec3( l->getVertex( v[0] ), ends[1].sg() );
+                            sgCopyVec3( l->getVertex( v[1] ), ends[0].sg() );
                         }
                         found = true;
                     }
@@ -685,18 +685,8 @@ void FGAICarrier::TurnToBase(){
 void FGAICarrier::ReturnToBox(){
     double course, distance, az2;
 
-    //get the carrier position
-    carrierpos = pos;
-
-    //cout << "lat: " << carrierpos[1] << " lon: " << carrierpos[0] << endl;
-
     //calculate the bearing and range of the initial position from the carrier
-    geo_inverse_wgs_84(carrierpos[2],
-                       carrierpos[1],
-                       carrierpos[0],
-                       initialpos[1],
-                       initialpos[0],
-                       &course, &az2, &distance);
+    geo_inverse_wgs_84(pos, mOpBoxPos, &course, &az2, &distance);
 
     distance *= SG_METER_TO_NM;
 
@@ -720,33 +710,33 @@ bool FGAICarrier::OutsideBox() { //returns true if the carrier is outside operat
         return false;
     }
 
-    if (initialpos[1] >= 0) { //northern hemisphere
-        if (pos[1] >= initialpos[1] + max_lat)
+    if (mOpBoxPos.getLatitudeDeg() >= 0) { //northern hemisphere
+        if (pos.getLatitudeDeg() >= mOpBoxPos.getLatitudeDeg() + max_lat)
             return true;
 
-        if (pos[1] <= initialpos[1] - min_lat)
+        if (pos.getLatitudeDeg() <= mOpBoxPos.getLatitudeDeg() - min_lat)
             return true;
 
     } else {                  //southern hemisphere
-        if (pos[1] <= initialpos[1] - max_lat)
+        if (pos.getLatitudeDeg() <= mOpBoxPos.getLatitudeDeg() - max_lat)
             return true;
 
-        if (pos[1] >= initialpos[1] + min_lat)
+        if (pos.getLatitudeDeg() >= mOpBoxPos.getLatitudeDeg() + min_lat)
             return true;
     }
 
-    if (initialpos[0] >=0) { //eastern hemisphere
-        if (pos[0] >= initialpos[0] + max_long)
+    if (mOpBoxPos.getLongitudeDeg() >=0) { //eastern hemisphere
+        if (pos.getLongitudeDeg() >= mOpBoxPos.getLongitudeDeg() + max_long)
             return true;
 
-        if (pos[0] <= initialpos[0] - min_long)
+        if (pos.getLongitudeDeg() <= mOpBoxPos.getLongitudeDeg() - min_long)
             return true;
 
     } else {                 //western hemisphere
-        if (pos[0] <= initialpos[0] - max_long)
+        if (pos.getLongitudeDeg() <= mOpBoxPos.getLongitudeDeg() - max_long)
             return true;
 
-        if (pos[0] >= initialpos[0] + min_long)
+        if (pos.getLongitudeDeg() >= mOpBoxPos.getLongitudeDeg() + min_long)
             return true;
     }
 
index 4a823358a7f7453ae07e1f47c126f45db097e571..9a3d52f416861b57e109fabf41e5cd25d67c3d27 100644 (file)
@@ -155,8 +155,7 @@ private:
     bool wave_off_lights;
 
     // these are for maneuvering the carrier
-    Point3D carrierpos;
-    Point3D initialpos;
+    SGGeod mOpBoxPos;
 
     double wind_speed_from_north_kts ;
     double wind_speed_from_east_kts  ;
index 89d90b593ca01b58a605c099aa9336f74048ba04..e4bb79176aeaf42feb6ce87727a2cde379d1ba1f 100755 (executable)
@@ -291,15 +291,12 @@ void FGAIMultiplayer::update(double dt)
   }
   
   // extract the position
-  SGGeod geod = ecPos;
-  pos.setlat(geod.getLatitudeDeg());
-  pos.setlon(geod.getLongitudeDeg());
-  pos.setelev(geod.getElevationM());
+  pos = SGGeod::fromCart(ecPos);
   
   // The quaternion rotating from the earth centered frame to the
   // horizontal local frame
-  SGQuatf qEc2Hl = SGQuatf::fromLonLatRad((float)geod.getLongitudeRad(),
-                                          (float)geod.getLatitudeRad());
+  SGQuatf qEc2Hl = SGQuatf::fromLonLatRad((float)pos.getLongitudeRad(),
+                                          (float)pos.getLatitudeRad());
   // The orientation wrt the horizontal local frame
   SGQuatf hlOr = conj(qEc2Hl)*ecOrient;
   float hDeg, pDeg, rDeg;
@@ -309,7 +306,7 @@ void FGAIMultiplayer::update(double dt)
   pitch = pDeg;
 
   SG_LOG(SG_GENERAL, SG_DEBUG, "Multiplayer position and orientation: "
-         << geod << ", " << hlOr);
+         << ecPos << ", " << hlOr);
 
   //###########################//
   // do calculations for radar //
index ba903d07ceff96de1fb50a870cbf9d26d886eb95..2c8e3993f3f85193319532712d036a444045c6f5 100644 (file)
@@ -135,8 +135,8 @@ void FGAIShip::Run(double dt) {
                           * speed * 1.686 / ft_per_deg_lon;
 
    // set new position
-   pos.setlat( pos.lat() + speed_north_deg_sec * dt);
-   pos.setlon( pos.lon() + speed_east_deg_sec * dt); 
+   pos.setLatitudeDeg( pos.getLatitudeDeg() + speed_north_deg_sec * dt);
+   pos.setLongitudeDeg( pos.getLongitudeDeg() + speed_east_deg_sec * dt); 
 
    
    // adjust heading based on current rudder angle
index 5814d2895b9ece03d52593dc981239e87b8902e2..0fafd7055168f1f043d3cd1e87cc85b26f0a6d8b 100644 (file)
@@ -106,8 +106,8 @@ void FGAIStorm::Run(double dt) {
                           * speed * 1.686 / ft_per_deg_lon;
 
    // set new position
-   pos.setlat( pos.lat() + speed_north_deg_sec * dt);
-   pos.setlon( pos.lon() + speed_east_deg_sec * dt); 
+   pos.setLatitudeDeg( pos.getLatitudeDeg() + speed_north_deg_sec * dt);
+   pos.setLongitudeDeg( pos.getLongitudeDeg() + speed_east_deg_sec * dt); 
 
    // do calculations for weather radar display 
    UpdateRadar(manager);
@@ -159,8 +159,8 @@ void FGAIStorm::Run(double dt) {
    double user_altitude  = manager->get_user_altitude();
 
    // calculate range to target in feet and nautical miles
-   double lat_range = fabs(pos.lat() - user_latitude) * ft_per_deg_lat;
-   double lon_range = fabs(pos.lon() - user_longitude) * ft_per_deg_lon;
+   double lat_range = fabs(pos.getLatitudeDeg() - user_latitude) * ft_per_deg_lat;
+   double lon_range = fabs(pos.getLongitudeDeg() - user_longitude) * ft_per_deg_lon;
    double range_ft = sqrt(lat_range*lat_range + lon_range*lon_range);
    range = range_ft / 6076.11549;
 
index f79c780b89e953355a3407a028de4fbb658b676f..0253a0f8b83e94a40586ffe61eb876046ec011bd 100644 (file)
@@ -88,8 +88,8 @@ void FGAIThermal::Run(double dt) {
    double user_altitude  = manager->get_user_altitude();
 
    // calculate range to target in feet and nautical miles
-   double lat_range = fabs(pos.lat() - user_latitude) * ft_per_deg_lat;
-   double lon_range = fabs(pos.lon() - user_longitude) * ft_per_deg_lon;
+   double lat_range = fabs(pos.getLatitudeDeg() - user_latitude) * ft_per_deg_lat;
+   double lon_range = fabs(pos.getLongitudeDeg() - user_longitude) * ft_per_deg_lon;
    double range_ft = sqrt(lat_range*lat_range + lon_range*lon_range);
    range = range_ft / 6076.11549;
 
index 0a37f5864619509d077c78cf34dfcfefd26a5df9..ad36f28cf0e664152fceeead119e9e79e6be7356 100644 (file)
@@ -23,6 +23,7 @@
 #  include <config.h>
 #endif
 
+#include <simgear/math/SGMath.hxx>
 #include <simgear/math/sg_geodesy.hxx>
 #include <Main/fg_props.hxx>
 
@@ -78,9 +79,7 @@ void FGACMS::update( double dt ) {
     double acc_down = _acc_down->getDoubleValue();
     _set_Accels_Local( acc_lon, acc_lat, acc_down );
 
-    sgVec3 accel_ned;
-    sgSetVec3(accel_ned, acc_lon, acc_lat, acc_down);
-    double accel = sgLengthVec3 (accel_ned) * SG_FEET_TO_METER;
+    double accel = norm(SGVec3d(acc_lon, acc_lat, acc_down)) * SG_FEET_TO_METER;
 
     double velocity = (_speed->getDoubleValue() * SG_KT_TO_MPS) + accel * dt;
     double dist = cos (pitch) * velocity * dt;
@@ -89,16 +88,15 @@ void FGACMS::update( double dt ) {
     _set_V_calibrated_kts( kts );
     _set_V_ground_speed( kts );
 
+    SGGeod pos = SGGeod::fromDegM(get_Longitude(), get_Latitude(), get_Altitude());
     // update (lon/lat) position
-    double lat2, lon2, az2;
-    geo_direct_wgs_84 ( get_Altitude(),
-                        get_Latitude() * SGD_RADIANS_TO_DEGREES,
-                        get_Longitude() * SGD_RADIANS_TO_DEGREES,
-                        heading * SGD_RADIANS_TO_DEGREES,
-                        dist, &lat2, &lon2, &az2 );
-
-    _set_Longitude( lon2 * SGD_DEGREES_TO_RADIANS );
-    _set_Latitude( lat2 * SGD_DEGREES_TO_RADIANS );
+    SGGeod pos2;
+    double az2;
+    geo_direct_wgs_84 ( pos, heading * SGD_RADIANS_TO_DEGREES,
+                        dist, pos2, &az2 );
+
+    _set_Longitude( pos2.getLongitudeRad() );
+    _set_Latitude( pos2.getLatitudeRad() );
 
     double sl_radius, lat_geoc;
     sgGeodToGeoc( get_Latitude(), get_Altitude(), &sl_radius, &lat_geoc );
index a55de0eadc7cd0a34e707d5772b1422ae1adc198..4db3fb11ea035efe003fb3dfbb2970d358433468 100644 (file)
@@ -156,7 +156,7 @@ bool FGMultiplay::process() {
     // first the aprioriate structure for the geodetic one
     SGGeod geod = SGGeod::fromRadFt(lon, lat, ifce->get_Altitude());
     // Convert to cartesion coordinate
-    motionInfo.position = geod;
+    motionInfo.position = SGVec3d::fromGeod(geod);
     
     // The quaternion rotating from the earth centered frame to the
     // horizontal local frame