📄 myfunctions.cpp
字号:
#include "MyHead1.h"
double Cx_function(double v) //取攻角固定 为0.2094
{
double ma = v/v_sound;
double cx = 0;
if(ma<0.7)
cx = 0.45;
else if((ma>=0.7)&&(ma<0.8))
cx = 0.51+(ma-0.7)*(0.56-0.51)/0.1;
else if((ma>=0.8)&&(ma<0.9))
cx = 0.56+(ma-0.8)*(0.59-0.56)/0.1;
else if((ma>=0.9)&&(ma<1))
cx = 0.59+(ma-0.9)*(0.77-0.59)/0.1;
else if((ma>=1)&&(ma<1.1))
cx = 0.77+(ma-1)*(0.93-0.77)/0.1;
else
cout<<"v unavilable"<<endl;
cx = 0.9;
return cx;
}
double Cy_function(double c_ang)
{
double cy = 0;
if((c_ang>=0)&&(c_ang<=0.3491))
cy = c_ang*0.54/0.3491;
else
cout<<"c_ang wrong"<<endl;
/*
if(c_ang == 0)
cy = 0;
else if(c_ang == 0.3491)
cy = 0.54;
else
cout<<"c_ang wrong"<<endl;
*/
return cy;
}
double Dvdt_function_a(double v, double ang, double x, double y)
{
return -0.5/m*1.225*s*Cx_function(v)*1000;//-g*sin(ang);
}
double Dvdt_function_b(double v, double ang, double x, double y)
{
return -g*sin(ang);
}
double V_f(double t, double v, double a, double b)
{
return a*v*v+b;
}
double Dangdt_function_a(double v, double ang, double x, double y, double c_ang)
{
return -g/v;// *cos(ang);//+0.5/m*1.225*s*(1-y/44300)*Cy_function(v,c_ang)*v*v;
}
double Dangdt_function_b(double v, double ang, double x, double y, double c_ang)
{
return 0.5/m*1.225*s*Cy_function(c_ang)*v*1000;
}
double Ang_f(double t, double ang, double a, double b)
{
return a*cos(ang)+b;
}
double Ang_f1(double t, double ang, double a, double b)
{
return 0;
}
double Dxdt_function(double v, double ang, double x, double y)
{
return v*cos(ang);
}
double X_f(double t, double x, double a)
{
return a;
}
double Dydt_function(double v, double ang, double x, double y)
{
return v*sin(ang);
}
double Y_f(double t, double y, double a)
{
return a;
}
double Ds_angdt_function(double v, double ang)
{
return 0.5/m*1.225*1000*v*s*0.54/cos(ang);
}
double S_ang_f(double t, double s_ang, double a)
{
return a;
}
double Dzdt_function(double v, double ang, double s_ang)
{
return -v*cos(ang)*sin(s_ang);
}
double Z_f(double t, double z, double a)
{
return a;
}
double R_k_function(double h, double x_n,
double y_n, double (*f)(double,double))//h步进长度,k1-k4四阶R_K法中间量,x、y_n表示x、y(n)
{
double k1, k2, k3, k4;
k1 = h*f(x_n, y_n);
k2 = h*f(x_n+h/2, y_n+k1/2);
k3 = h*f(x_n+h/2, y_n+k2/2);
k4 = h*f(x_n+h, y_n+k3);
return y_n+(k1+2*k2+2*k3+k4)/6;
}
double R_k_function(double h, double x_n, double y_n,
double a, double (*f)(double,double,double))
{
double k1, k2, k3, k4;
k1 = h*f(x_n, y_n,a);
k2 = h*f(x_n+h/2, y_n+k1/2,a);
k3 = h*f(x_n+h/2, y_n+k2/2,a);
k4 = h*f(x_n+h, y_n+k3,a);
return y_n+(k1+2*k2+2*k3+k4)/6;
}
double R_k_function(double h, double x_n, double y_n,
double a, double b, double (*f)(double,double,double,double))
{
double k1, k2, k3, k4;
k1 = h*f(x_n, y_n,a,b);
k2 = h*f(x_n+h/2, y_n+k1/2,a,b);
k3 = h*f(x_n+h/2, y_n+k2/2,a,b);
k4 = h*f(x_n+h, y_n+k3,a,b);
return y_n+(k1+2*k2+2*k3+k4)/6;
}
void Init(double &v, double &ang, double &x, double &y, double &c_ang)
{
// cout<<"v = 250; ang = 0; x = ; y = 4200; c_ang = 0;"<<endl;
v = 250; ang = 0; x = 0 ; y = 5000; //c_ang = 0;
c_ang = 0.3491;
/*
cout<<"v= ";
cin>>v;
cout<<", ang= ";
cin>>ang;
cout<<", x= ";
cin>>x;
cout<<", y= ";
cin>>y;
cout<<", c_ang= ";
cin>>c_ang;
*/
return;
}
double Miss_check(double v, double y, double c_ang)
{
double ang, x;
double v1, ang1, x1, y1;
double t = 0, h = 0.25;
ang = 0; x = 0 ;
double v_a, v_b, ang_a, ang_b;
double x_a, y_a;
double dangdt;
for(; y>0; )
{
v_a = Dvdt_function_a(v, ang, x, y);
v_b = Dvdt_function_b(v, ang, x, y);
v1 = R_k_function(h, t, v, v_a, v_b, V_f);
ang_a = Dangdt_function_a(v, ang, x, y, c_ang);
ang_b = Dangdt_function_b(v, ang, x, y, c_ang);
dangdt = Ang_f(t,ang,ang_a,ang_b);
if(dangdt<0)
ang1 = R_k_function(h, t, ang, ang_a, ang_b, Ang_f);
else
ang1 = R_k_function(h, t, ang, ang_a, ang_b, Ang_f1);
x_a = Dxdt_function(v, ang, x, y);
x1 = R_k_function(h, t, x, x_a, X_f);
y_a = Dydt_function(v, ang, x, y);
y1 = R_k_function(h, t, y, y_a, Y_f);
v =v1;
ang = ang1;
x = x1;
y = y1;
t++;
}
return x;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -