]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIBallistic.cxx
Set the format default to float instead of int.
[flightgear.git] / src / AIModel / AIBallistic.cxx
index d3ea25a1be4828b187902b1b96105e3f3e666923..2a9f97e733993674164850c7e873cdb60c6ed249 100644 (file)
@@ -27,7 +27,6 @@
 #include "AIBallistic.hxx"
 
 
-
 FGAIBallistic::FGAIBallistic(FGAIManager* mgr) {
     manager = mgr;
     _type_str = "ballistic";
@@ -117,29 +116,37 @@ void FGAIBallistic::setCd(double c) {
    Cd = c;
 }
 
-void FGAIBallistic::setWeight(double w) {
-   weight = w;
+void FGAIBallistic::setMass(double m) {
+   mass = m;
 }
 
 void FGAIBallistic::Run(double dt) {
+
    life_timer += dt;
+//    cout << "life timer 1" << life_timer <<  dt << endl;
    if (life_timer > life) setDie(true); 
 
    double speed_north_deg_sec;
    double speed_east_deg_sec;
    double wind_speed_from_north_deg_sec;
    double wind_speed_from_east_deg_sec;
-   double mass;
-      
-   // the drag calculations below assume sea-level density,
-   // rho = 0.023780  slugs/ft3
-   // calculate mass
-   mass = weight * lbs_to_slugs;
+   double Cdm;      // Cd adjusted by Mach Number
+   
+   // Adjust Cd by Mach number. The equations are based on curves
+   // for a conventional shell/bullet (no boat-tail). 
+   if ( Mach < 0.7 ) { Cdm = 0.0125 * Mach + Cd; }
+     else if ( 0.7 < Mach && Mach < 1.2 ) { 
+       Cdm = 0.3742 * pow ( Mach, 2) - 0.252 * Mach + 0.0021 + Cd; }
+     else { Cdm = 0.2965 * pow ( Mach, -1.1506 ) + Cd; }
+
+//   cout << " Mach , " << Mach << " , Cdm , " << Cdm << endl;
    
    // drag = Cd * 0.5 * rho * speed * speed * drag_area;
+   // rho is adjusted for altitude in void FGAIBase::update,
+   // using Standard Atmosphere (sealevel temperature 15C)
    // acceleration = drag/mass;
    // adjust speed by drag
-   speed -= (Cd * 0.5 * rho * speed * speed * drag_area/mass) * dt; 
+   speed -= (Cdm * 0.5 * rho * speed * speed * drag_area/mass) * dt; 
 
    // don't let speed become negative
    if ( speed < 0.0 ) speed = 0.0;
@@ -153,7 +160,7 @@ void FGAIBallistic::Run(double dt) {
    speed_east_deg_sec  = sin(hdg / SG_RADIANS_TO_DEGREES) * hs / ft_per_deg_lon;
    
    // if wind not required, set to zero
-   if (!wind){
+   if (!wind) {
       wind_from_north = 0;
       wind_from_east = 0;
    }
@@ -185,7 +192,8 @@ void FGAIBallistic::Run(double dt) {
 }  // end Run
 
 double FGAIBallistic::_getTime() const {
-   return life_timer;
+//    cout << "life timer 2" << life_timer << endl;
+  return life_timer;
 }
 
 // end AIBallistic