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

📄 myfunctions.cpp

📁 该程序用于计算激光制导炸弹的纵向投放区域
💻 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 + -