]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIBallistic.cxx
David Culp:
[flightgear.git] / src / AIModel / AIBallistic.cxx
index 6ebe6f753e64a2c343c8db6723385d9be92eec6c..86f1e3ad180624b139a41fef96c5dffdeddfb609 100644 (file)
@@ -44,7 +44,6 @@ FGAIBallistic::~FGAIBallistic() {
 
 bool FGAIBallistic::init() {
    FGAIBase::init();
-   aero_stabilized = true;
    hdg = azimuth;
    pitch = elevation;
    roll = rotation;
@@ -84,8 +83,8 @@ void FGAIBallistic::setRoll(double rl) {
    rotation = rl;
 }
 
-void FGAIBallistic::setStabilization(bool val) {
-   aero_stabilized = val;
+void FGAIBallistic::setStabilisation(bool val) {
+   aero_stabilised = val;
 }
 
 void FGAIBallistic::setDragArea(double a) {
@@ -123,19 +122,30 @@ void FGAIBallistic::setMass(double 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 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;
@@ -170,7 +180,8 @@ void FGAIBallistic::Run(double dt) {
    pos.setelev(altitude * SG_FEET_TO_METER); 
 
    // recalculate pitch (velocity vector) if aerostabilized
-   if (aero_stabilized) pitch = atan2( vs, hs ) * SG_RADIANS_TO_DEGREES;
+   //   cout << "aero_stabilised " << aero_stabilised  << endl ;
+   if (aero_stabilised) pitch = atan2( vs, hs ) * SG_RADIANS_TO_DEGREES;
 
    // recalculate total speed
    speed = sqrt( vs * vs + hs * hs);
@@ -181,8 +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
-