]> git.mxchange.org Git - flightgear.git/commitdiff
Prevent two possible nan's
authorErik Hofman <erik@ehofman.com>
Tue, 29 Dec 2015 13:55:22 +0000 (14:55 +0100)
committerErik Hofman <erik@ehofman.com>
Tue, 29 Dec 2015 13:55:22 +0000 (14:55 +0100)
src/FDM/JSBSim/initialization/FGTrim.cpp
src/Traffic/Schedule.cxx

index 6e7f90a5598d68334ff1bcc95411c12b5206bc9a..526b81f22de4694a3ff882083191c7fc3b857055 100644 (file)
@@ -503,7 +503,11 @@ FGTrim::RotationParameters FGTrim::calcRotation(vector<ContactPoints>& contacts,
     double DistPlane = d0 * DotProduct(u, iter->normal) / length;
     // The coordinate of the point of intersection 'P' between the circle and
     // the ground is (0, DistPlane, alpha) in the basis (u, v, t)
-    double alpha = sqrt(sqrRadius - DistPlane * DistPlane);
+    double mag = sqrRadius - DistPlane * DistPlane;
+    if (mag < 0) {
+      cout << "FGTrim::calcRotation DistPlane^2 larger than sqrRadius" << endl;
+    }
+    double alpha = sqrt(max(mag, 0.0));
     FGColumnVector3 CP = alpha * t + DistPlane * v;
     // The transformation is now constructed: we can extract the angle using the
     // classical formulas (cosine is obtained from the dot product and sine from
index 691a34ea6d9fb197b5a0d138340b7ba2fcf10bf8..01878ea269b0eff9849c364ac3b4b3be3b2992e7 100644 (file)
@@ -652,7 +652,10 @@ double FGAISchedule::getSpeed()
   double dist = SGGeodesy::distanceNm(dep->geod(), arr->geod());
   double remainingTimeEnroute = (*i)->getArrivalTime() - (*i)->getDepartureTime();
 
-  double speed = dist / (remainingTimeEnroute/3600.0);
+  double speed = 0.0;
+  if (remainingTimeEnroute > 0.01) 
+    speed = dist / (remainingTimeEnroute/3600.0);
+
   SG_CLAMP_RANGE(speed, 300.0, 500.0);
   return speed;
 }