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

📄 atmostrans.cpp

📁 计算大气光谱透射率和平均透射率
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	}

	sum1 = (GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthbegin, temperature, Hr, height, height1, height2, r)
		+ GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthend, temperature, Hr, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelength, temperature, Hr, 
				                                                     height, height1, height2, r);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetCO2AveTransOfHorizonInAnyHeightFrom3To5(double wavelength1, double wavelength2,
															  double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelengthbegin, height, distance)
		+ GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelengthend, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelength, height, distance);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetCO2AveTransOfInclineInAnyHeightFrom3To5(double wavelength1, double wavelength2,
										    double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthbegin, height, height1, height2, r)
		+ GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthend, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelength, height, height1, height2, r);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetAtmosAveTransOfHorizonInAnyHeightFrom3To5(double wavelength1, double wavelength2, int temperature,
									double Hr, double height, double distance, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfHorizonInAnyHeightFrom3To5(wavelength1, wavelength2, temperature, Hr, height, distance)
		*GetCO2AveTransOfHorizonInAnyHeightFrom3To5(wavelength1, wavelength2, height, distance)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, distance)
		*GetRainSpectrumTrans(Jrain, distance)
		*GetSnowSpectrumTrans(Jsnow, distance);
	return atmosavetrans;
};

double AtmosTrans::GetAtmosAveTransOfInclineInAnyHeightFrom3To5(double wavelength1, double wavelength2, int temperature,
									double Hr, double height, double height1, double height2, double r, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfInclineInAnyHeightFrom3To5(wavelength1, wavelength2, temperature, Hr, height, height1, height2, r)
		*GetCO2AveTransOfInclineInAnyHeightFrom3To5(wavelength1, wavelength2, height, height1, height2, r)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, (height2 - height1)/cos(r*PI/180))
		*GetRainSpectrumTrans(Jrain, (height2 - height1)/cos(r*PI/180))
		*GetSnowSpectrumTrans(Jsnow, (height2 - height1)/cos(r*PI/180));
	return atmosavetrans;
};



double AtmosTrans::GetVaporAveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature, 
																 double Hr, double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, vaporavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthbegin, temperature, Hr, height, distance)
		+ GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthend, temperature, Hr, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelength, temperature, Hr, 
				                                                     height, distance);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetVaporAveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature, 
											double Hr, double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, vaporavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthbegin, temperature, Hr, height, height1, height2, r)
		+ GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthend, temperature, Hr, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelength, temperature, Hr, 
				                                                     height, height1, height2, r);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetCO2AveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2,
															   double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthbegin, height, distance)
		+ GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthend, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelength, height, distance);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetCO2AveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, 
										double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthbegin, height, height1, height2, r)
		+ GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthend, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelength, height, height1, height2, r);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetAtmosAveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature,
											double Hr, double height, double distance, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfHorizonInAnyHeightFrom8To14(wavelength1, wavelength2, temperature, Hr, height, distance)
		*GetCO2AveTransOfHorizonInAnyHeightFrom8To14(wavelength1, wavelength2, height, distance)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, distance)
		*GetRainSpectrumTrans(Jrain, distance)
		*GetSnowSpectrumTrans(Jsnow, distance);
	return atmosavetrans;
};

double AtmosTrans::GetAtmosAveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature,
											double Hr, double height, double height1, double height2, double r, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfInclineInAnyHeightFrom8To14(wavelength1, wavelength2, temperature, Hr, height, height1, height2, r)
		*GetCO2AveTransOfInclineInAnyHeightFrom8To14(wavelength1, wavelength2, height, height1, height2, r)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, (height2 - height1)/cos(r*PI/180))
		*GetRainSpectrumTrans(Jrain, (height2 - height1)/cos(r*PI/180))
		*GetSnowSpectrumTrans(Jsnow, (height2 - height1)/cos(r*PI/180));
	return atmosavetrans;
};

double AtmosTrans::GetDispersionAveTrans(double wavelength1, double wavelength2, double Dv, double distance)
{

	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, dispersionavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetDispersionSpectrumTrans(wavelengthbegin, Dv, distance)
		+ GetDispersionSpectrumTrans(wavelengthend, Dv, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetDispersionSpectrumTrans(wavelength, Dv, distance);
		}
	}
	else{}

	dispersionavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return dispersionavetrans;
};

⌨️ 快捷键说明

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