gusucode.com > VC 3D弹道仿真程序源码文件-源码程序 > VC 3D弹道仿真程序源码文件-源码程序/code/Bomb.cpp
#include <math.h> #include <fstream.h> #include <iomanip.h> //Download by http://www.NewXing.com #include "Bomb.h" #include "EarthModel.h" const double PI=3.1415926; const double RAD=180./PI; extern double now_time ; CBomb::CBomb() { pXS=new double [1000000][36]; Tag=0; } CBomb::~CBomb() { } void CBomb::Analysize( double XS[], double Max[] ) { if ( fabs(Max[0]) < fabs(XS[8]) ) Max[0] = XS[17]; if ( fabs(Max[1]) < fabs(XS[13]) ) Max[1] = XS[14]; if ( fabs(Max[2]) < fabs(XS[14]) ) Max[2] = XS[12]; return ; } void CBomb::RecordData( double XS[] ) { (*(pXS+Tag))[0] = now_time ; for ( int i=0; i<36; ++i ) { (*(pXS+Tag))[i+1] = XS[i]; } ++Tag; return ; } void CBomb::RecordToFile( void ) { CEarth *pEarth_Record = new CEarth ; extern double t_step; extern float dis_FIN[4]; ofstream fFile( "BallisticData.txt" ); fFile.flags(ios :: left); fFile<<setw(8)<<"time"; fFile<<setw(14)<<" x "<<setw(14)<<" y "<<setw(14)<<" z "; fFile<<setw(14)<<"Vx"<<setw(14)<<"Vy"<<setw(14)<<"Vz"<<setw(14)<<"Vel"; fFile<<setw(14)<<"cita"<<setw(14)<<"psi_V"<<setw(14)<<"gama_v"; fFile<<setw(14)<<"alpha"<<setw(14)<<"beta"; fFile<<setw(14)<<"m"<<setw(14)<<"Thrust"; fFile<<setw(14)<<"nx2"<<setw(14)<<"ny2"; fFile<<setw(14)<<"delta_y"<<setw(14)<<"delta_z"; fFile<<setw(14)<<"B"<<setw(14)<<"h"; fFile<<setw(14)<<"XForce"<<setw(14)<<"YForce"<<setw(14)<<"ZForce"; fFile<<setw(14)<<"q"<<setw(14)<<"diff_q"; fFile<<setw(14)<<"CITA"<<setw(14)<<"pusai"<<endl; CalRange( );//将数据文件最后一帧,计算成实际落点参数 for ( int i = 0; i < Tag+1; ++ i ) //最后一组用于修正 { fFile<<setw(8)<<pXS[i][0]; //time fFile<<setw(14)<<pXS[i][4]<<setw(14)<<pXS[i][5]<<setw(14)<<pXS[i][6]; // x y z fFile<<setw(14)<<pXS[i][1]<<setw(14)<<pXS[i][2]<<setw(14)<<pXS[i][3]<<setw(14)<<pXS[i][10]; // Vx Vy Vz Vel fFile<<setw(14)<<pXS[i][11]*RAD<<setw(14)<<pXS[i][12]*RAD<<setw(14)<<pXS[i][13]*RAD;//cita pesai_V gamma_v (deg) fFile<<setw(14)<<pXS[i][14]*RAD<<setw(14)<<pXS[i][15]*RAD; // alpha beta (deg) fFile<<setw(14)<<pXS[i][7]<<setw(14)<<pXS[i][19]; // m Thrust fFile<<setw(14)<<pXS[i][34]<<setw(14)<<pXS[i][35]; // nx2 ny2 fFile<<setw(14)<<pXS[i][32]*RAD<<setw(14)<<pXS[i][33]*RAD; // delta_y delta_z (deg) fFile<<setw(14)<< ( pEarth_Record->Cal_B( pXS[i][18]) )*RAD <<setw(14)<<pXS[i][16]; // B h fFile<<setw(14)<<pXS[i][20]<<setw(14)<<pXS[i][21]<<setw(14)<<pXS[i][22];// xXForce YForce ZForce fFile<<setw(14)<<pXS[i][25]*RAD<<setw(14)<<pXS[i][26]*RAD; // q[0] q[1] degree/s fFile<<setw(14)<<pXS[i][29]*RAD<<setw(14)<<pXS[i][30]*RAD<<endl; // CITA PUSAI (deg) } return ; } /*计算实际落点参数*/ void CBomb::CalRange( void ) { extern double a,b,c,d,e; double XC; XC= pXS[Tag-1][4]; double Temp[36]; for ( int i=0; i<36; ++i ) {//用线性插值,计算实际落点参数 Temp[i] = pXS[Tag-1][i]+(pXS[Tag-2][i]-pXS[Tag-1][i])*(0.0-pXS[Tag-1][16])/(pXS[Tag-2][16]-pXS[Tag-1][16]); } for ( i = 0; i < 36; ++ i ) { pXS[Tag][i] = Temp[i]; } a=fabs(XC-pXS[Tag][4]); //b=pXS[Tag][10]*RAD; c=pXS[Tag][0]; d=pXS[Tag][4]; e=fabs(pXS[Tag][6]); return ; }