⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fginitialcondition.cpp

📁 6 DOF Missle Simulation
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//******************************************************************************bool FGInitialCondition::solve(double *y,double x){  double x1,x2,x3,f1,f2,f3,d,d0;  double eps=1E-5;  double const relax =0.9;  int i;  bool success=false;  //initializations  d=1;  x2 = 0;  x1=xlo;x3=xhi;  f1=(this->*sfunc)(x1)-x;  f3=(this->*sfunc)(x3)-x;  d0=fabs(x3-x1);  //iterations  i=0;  while ((fabs(d) > eps) && (i < 100)) {    d=(x3-x1)/d0;    x2 = x1-d*d0*f1/(f3-f1);    f2=(this->*sfunc)(x2)-x;    //cout << "solve x1,x2,x3: " << x1 << "," << x2 << "," << x3 << endl;    //cout << "                " << f1 << "," << f2 << "," << f3 << endl;    if(fabs(f2) <= 0.001) {      x1=x3=x2;    } else if(f1*f2 <= 0.0) {      x3=x2;      f3=f2;      f1=relax*f1;    } else if(f2*f3 <= 0) {      x1=x2;      f1=f2;      f3=relax*f3;    }    //cout << i << endl;    i++;  }//end while  if(i < 100) {    success=true;    *y=x2;  }  //cout << "Success= " << success << " Vcas: " << vcas*fpstokts << " Mach: " << x2 << endl;  return success;}//******************************************************************************double FGInitialCondition::GetWindDirDegIC(void) const {  if(weast != 0.0)    return atan2(weast,wnorth)*radtodeg;  else if(wnorth > 0)    return 0.0;  else    return 180.0;}//******************************************************************************bool FGInitialCondition::Load(string rstfile, bool useStoredPath){  int n;  string sep = "/";  if( useStoredPath ) {    init_file_name = fdmex->GetFullAircraftPath() + sep + rstfile + ".xml";  } else {    init_file_name = rstfile;  }  document = LoadXMLDocument(init_file_name);  // Make sure that the document is valid  if (!document) {    cerr << "File: " << init_file_name << " could not be read." << endl;    exit(-1);  }  if (document->GetName() != string("initialize")) {    cerr << "File: " << init_file_name << " is not a reset file." << endl;    exit(-1);  }  if (document->FindElement("latitude"))    SetLatitudeDegIC(document->FindElementValueAsNumberConvertTo("latitude", "DEG"));  if (document->FindElement("longitude"))    SetLongitudeDegIC(document->FindElementValueAsNumberConvertTo("longitude", "DEG"));  if (document->FindElement("altitude"))    SetAltitudeFtIC(document->FindElementValueAsNumberConvertTo("altitude", "FT"));  if (document->FindElement("ubody"))    SetUBodyFpsIC(document->FindElementValueAsNumberConvertTo("ubody", "FT/SEC"));  if (document->FindElement("vbody"))    SetVBodyFpsIC(document->FindElementValueAsNumberConvertTo("vbody", "FT/SEC"));  if (document->FindElement("wbody"))    SetWBodyFpsIC(document->FindElementValueAsNumberConvertTo("wbody", "FT/SEC"));  if (document->FindElement("vnorth"))    SetVNorthFpsIC(document->FindElementValueAsNumberConvertTo("vnorth", "FT/SEC"));  if (document->FindElement("veast"))    SetVEastFpsIC(document->FindElementValueAsNumberConvertTo("veast", "FT/SEC"));  if (document->FindElement("vdown"))    SetVDownFpsIC(document->FindElementValueAsNumberConvertTo("vdown", "FT/SEC"));  if (document->FindElement("winddir"))    SetWindDirDegIC(document->FindElementValueAsNumberConvertTo("winddir", "DEG"));  if (document->FindElement("vwind"))    SetWindMagKtsIC(document->FindElementValueAsNumberConvertTo("vwind", "KTS"));  if (document->FindElement("hwind"))    SetHeadWindKtsIC(document->FindElementValueAsNumberConvertTo("hwind", "KTS"));  if (document->FindElement("xwind"))    SetCrossWindKtsIC(document->FindElementValueAsNumberConvertTo("xwind", "KTS"));  if (document->FindElement("vc"))    SetVcalibratedKtsIC(document->FindElementValueAsNumberConvertTo("vc", "KTS"));  if (document->FindElement("vt"))    SetVtrueKtsIC(document->FindElementValueAsNumberConvertTo("vt", "KTS"));  if (document->FindElement("mach"))    SetMachIC(document->FindElementValueAsNumber("mach"));  if (document->FindElement("phi"))    SetPhiDegIC(document->FindElementValueAsNumberConvertTo("phi", "DEG"));  if (document->FindElement("theta"))    SetThetaDegIC(document->FindElementValueAsNumberConvertTo("theta", "DEG"));  if (document->FindElement("psi"))    SetPsiDegIC(document->FindElementValueAsNumberConvertTo("psi", "DEG"));  if (document->FindElement("alpha"))    SetAlphaDegIC(document->FindElementValueAsNumberConvertTo("alpha", "DEG"));  if (document->FindElement("beta"))    SetBetaDegIC(document->FindElementValueAsNumberConvertTo("beta", "DEG"));  if (document->FindElement("gamma"))    SetFlightPathAngleDegIC(document->FindElementValueAsNumberConvertTo("gamma", "DEG"));  if (document->FindElement("roc"))    SetClimbRateFpsIC(document->FindElementValueAsNumberConvertTo("roc", "FT/SEC"));  if (document->FindElement("vground"))    SetVgroundKtsIC(document->FindElementValueAsNumberConvertTo("vground", "KTS"));  if (document->FindElement("targetNlf"))  {    SetTargetNlfIC(document->FindElementValueAsNumber("targetNlf"));  }  // Check to see if any engines are specified to be initialized in a running state  FGPropulsion* propulsion = fdmex->GetPropulsion();  Element* running_elements = document->FindElement("running");  while (running_elements) {    n = int(running_elements->GetDataAsNumber());    propulsion->InitRunning(n);    running_elements = document->FindNextElement("running");  }  fdmex->RunIC();  return true;}//******************************************************************************void FGInitialCondition::bind(void){  PropertyManager->Tie("ic/vc-kts", this,                       &FGInitialCondition::GetVcalibratedKtsIC,                       &FGInitialCondition::SetVcalibratedKtsIC,                       true);  PropertyManager->Tie("ic/ve-kts", this,                       &FGInitialCondition::GetVequivalentKtsIC,                       &FGInitialCondition::SetVequivalentKtsIC,                       true);  PropertyManager->Tie("ic/vg-kts", this,                       &FGInitialCondition::GetVgroundKtsIC,                       &FGInitialCondition::SetVgroundKtsIC,                       true);  PropertyManager->Tie("ic/vt-kts", this,                       &FGInitialCondition::GetVtrueKtsIC,                       &FGInitialCondition::SetVtrueKtsIC,                       true);  PropertyManager->Tie("ic/mach", this,                       &FGInitialCondition::GetMachIC,                       &FGInitialCondition::SetMachIC,                       true);  PropertyManager->Tie("ic/roc-fpm", this,                       &FGInitialCondition::GetClimbRateFpmIC,                       &FGInitialCondition::SetClimbRateFpmIC,                       true);  PropertyManager->Tie("ic/gamma-deg", this,                       &FGInitialCondition::GetFlightPathAngleDegIC,                       &FGInitialCondition::SetFlightPathAngleDegIC,                       true);  PropertyManager->Tie("ic/alpha-deg", this,                       &FGInitialCondition::GetAlphaDegIC,                       &FGInitialCondition::SetAlphaDegIC,                       true);  PropertyManager->Tie("ic/beta-deg", this,                       &FGInitialCondition::GetBetaDegIC,                       &FGInitialCondition::SetBetaDegIC,                       true);  PropertyManager->Tie("ic/theta-deg", this,                       &FGInitialCondition::GetThetaDegIC,                       &FGInitialCondition::SetThetaDegIC,                       true);  PropertyManager->Tie("ic/phi-deg", this,                       &FGInitialCondition::GetPhiDegIC,                       &FGInitialCondition::SetPhiDegIC,                       true);  PropertyManager->Tie("ic/psi-true-deg", this,                       &FGInitialCondition::GetPsiDegIC );  PropertyManager->Tie("ic/lat-gc-deg", this,                       &FGInitialCondition::GetLatitudeDegIC,                       &FGInitialCondition::SetLatitudeDegIC,                       true);  PropertyManager->Tie("ic/long-gc-deg", this,                       &FGInitialCondition::GetLongitudeDegIC,                       &FGInitialCondition::SetLongitudeDegIC,                       true);  PropertyManager->Tie("ic/h-sl-ft", this,                       &FGInitialCondition::GetAltitudeFtIC,                       &FGInitialCondition::SetAltitudeFtIC,                       true);  PropertyManager->Tie("ic/h-agl-ft", this,                       &FGInitialCondition::GetAltitudeAGLFtIC,                       &FGInitialCondition::SetAltitudeAGLFtIC,                       true);  PropertyManager->Tie("ic/sea-level-radius-ft", this,                       &FGInitialCondition::GetSeaLevelRadiusFtIC,                       &FGInitialCondition::SetSeaLevelRadiusFtIC,                       true);  PropertyManager->Tie("ic/terrain-altitude-ft", this,                       &FGInitialCondition::GetTerrainAltitudeFtIC,                       &FGInitialCondition::SetTerrainAltitudeFtIC,                       true);  PropertyManager->Tie("ic/vg-fps", this,                       &FGInitialCondition::GetVgroundFpsIC,                       &FGInitialCondition::SetVgroundFpsIC,                       true);  PropertyManager->Tie("ic/vt-fps", this,                       &FGInitialCondition::GetVtrueFpsIC,                       &FGInitialCondition::SetVtrueFpsIC,                       true);  PropertyManager->Tie("ic/vw-bx-fps", this,                       &FGInitialCondition::GetWindUFpsIC);  PropertyManager->Tie("ic/vw-by-fps", this,                       &FGInitialCondition::GetWindVFpsIC);  PropertyManager->Tie("ic/vw-bz-fps", this,                       &FGInitialCondition::GetWindWFpsIC);  PropertyManager->Tie("ic/vw-north-fps", this,                       &FGInitialCondition::GetWindNFpsIC);  PropertyManager->Tie("ic/vw-east-fps", this,                       &FGInitialCondition::GetWindEFpsIC);  PropertyManager->Tie("ic/vw-down-fps", this,                       &FGInitialCondition::GetWindDFpsIC);  PropertyManager->Tie("ic/vw-mag-fps", this,                       &FGInitialCondition::GetWindFpsIC);  PropertyManager->Tie("ic/vw-dir-deg", this,                       &FGInitialCondition::GetWindDirDegIC,                       &FGInitialCondition::SetWindDirDegIC,                       true);  PropertyManager->Tie("ic/roc-fps", this,                       &FGInitialCondition::GetClimbRateFpsIC,                       &FGInitialCondition::SetClimbRateFpsIC,                       true);  PropertyManager->Tie("ic/u-fps", this,                       &FGInitialCondition::GetUBodyFpsIC,                       &FGInitialCondition::SetUBodyFpsIC,                       true);  PropertyManager->Tie("ic/v-fps", this,                       &FGInitialCondition::GetVBodyFpsIC,                       &FGInitialCondition::SetVBodyFpsIC,                       true);  PropertyManager->Tie("ic/w-fps", this,                       &FGInitialCondition::GetWBodyFpsIC,                       &FGInitialCondition::SetWBodyFpsIC,                       true);  PropertyManager->Tie("ic/vn-fps", this,                       &FGInitialCondition::GetVNorthFpsIC,                       &FGInitialCondition::SetVNorthFpsIC,                       true);  PropertyManager->Tie("ic/ve-fps", this,                       &FGInitialCondition::GetVEastFpsIC,                       &FGInitialCondition::SetVEastFpsIC,                       true);  PropertyManager->Tie("ic/vd-fps", this,                       &FGInitialCondition::GetVDownFpsIC,                       &FGInitialCondition::SetVDownFpsIC,                       true);  PropertyManager->Tie("ic/gamma-rad", this,                       &FGInitialCondition::GetFlightPathAngleRadIC,                       &FGInitialCondition::SetFlightPathAngleRadIC,                       true);  PropertyManager->Tie("ic/alpha-rad", this,                       &FGInitialCondition::GetAlphaRadIC,                       &FGInitialCondition::SetAlphaRadIC,                       true);  PropertyManager->Tie("ic/theta-rad", this,                       &FGInitialCondition::GetThetaRadIC,                       &FGInitialCondition::SetThetaRadIC,                       true);  PropertyManager->Tie("ic/beta-rad", this,                       &FGInitialCondition::GetBetaRadIC,                       &FGInitialCondition::SetBetaRadIC,                       true);  PropertyManager->Tie("ic/phi-rad", this,                       &FGInitialCondition::GetPhiRadIC,                       &FGInitialCondition::SetPhiRadIC,                       true);  PropertyManager->Tie("ic/psi-true-rad", this,                       &FGInitialCondition::GetPsiRadIC);  PropertyManager->Tie("ic/lat-gc-rad", this,                       &FGInitialCondition::GetLatitudeRadIC,                       &FGInitialCondition::SetLatitudeRadIC,                       true);  PropertyManager->Tie("ic/long-gc-rad", this,                       &FGInitialCondition::GetLongitudeRadIC,                       &FGInitialCondition::SetLongitudeRadIC,                       true);  PropertyManager->Tie("ic/p-rad_sec", this,                       &FGInitialCondition::GetPRadpsIC,                       &FGInitialCondition::SetPRadpsIC,                       true);  PropertyManager->Tie("ic/q-rad_sec", this,                       &FGInitialCondition::GetQRadpsIC,                       &FGInitialCondition::SetQRadpsIC,                       true);  PropertyManager->Tie("ic/r-rad_sec", this,                       &FGInitialCondition::GetRRadpsIC,                       &FGInitialCondition::SetRRadpsIC,                       true);  typedef int (FGInitialCondition::*iPMF)(void) const;  PropertyManager->Tie("simulation/write-state-file",                       this,                       (iPMF)0,                       &FGInitialCondition::WriteStateFile);}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//    The bitmasked value choices are as follows://    unset: In this case (the default) JSBSim would only print//       out the normally expected messages, essentially echoing//       the config files as they are read. If the environment//       variable is not set, debug_lvl is set to 1 internally//    0: This requests JSBSim not to output any messages//       whatsoever.//    1: This value explicity requests the normal JSBSim//       startup messages//    2: This value asks for a message to be printed out when//       a class is instantiated//    4: When this value is set, a message is displayed when a//       FGModel object executes its Run() method//    8: When this value is set, various runtime state variables//       are printed out periodically//    16: When set various parameters are sanity checked and//       a message is printed out when they go out of boundsvoid FGInitialCondition::Debug(int from){  if (debug_lvl <= 0) return;  if (debug_lvl & 1) { // Standard console startup message output  }  if (debug_lvl & 2 ) { // Instantiation/Destruction notification    if (from == 0) cout << "Instantiated: FGInitialCondition" << endl;    if (from == 1) cout << "Destroyed:    FGInitialCondition" << endl;  }  if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects  }  if (debug_lvl & 8 ) { // Runtime state variables  }  if (debug_lvl & 16) { // Sanity checking  }  if (debug_lvl & 64) {    if (from == 0) { // Constructor      cout << IdSrc << endl;      cout << IdHdr << endl;    }  }}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -