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

📄 fun.cpp

📁 该程序用于计算激光制导炸弹的纵向投放区域
💻 CPP
字号:
#include "defines.h"
#include <math.h>

const float v_sound = 334.0f;

//#include "stdafx.h"   //The file is a default precompile header of a project, so any "#include" written ahead of it will be ignored.

#include <iostream>   //Now, let's try to put it afterward.

using namespace std;


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;
}

⌨️ 快捷键说明

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