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

📄 radiationinput.h

📁 矩量法仿真电磁辐射和散射的源代码(c++)
💻 H
字号:
/*	Copyright (C) 2004-2005  Timothy C.A. Molteno	tim@molteno.net		This program is free software; you can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation; either version 2 of the License, or	(at your option) any later version.		This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.		You should have received a copy of the GNU General Public License	along with this program; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifndef __Radiation_Input__#define __Radiation_Input__#include <vector>#include "BaseInput.h"class RadiationInput : public BaseInput{public:		vector<double> theta, phi;	vector<double>  power_v, power_h, power_t;	vector<double>  pol_axial_ratio, pol_tilt;	string pol_sense; // ignore polarization sense	vector<double> E_theta_mag, E_phi_mag;	vector<double> E_theta_phase, E_phi_phase;	long n_items;		RadiationInput(std::string& filename)		: BaseInput(filename)	{		n_items = 0;				string searchString("RADIATION PATTERNS");		while (m_stream.good())		{			string line = readline();				if (line.find(searchString,0) != string::npos)			{								while (line.find("VOLTS/M",0) == string::npos)					line = readline();					/*				- - ANGLES - -           - POWER GAINS -       - - - POLARIZATION - - -    - - - E(THETA) - - -    - - - E(PHI) - - -				THETA     PHI        VERT.   HOR.    TOTAL      AXIAL     TILT   SENSE     MAGNITUDE    PHASE     MAGNITUDE    PHASE				DEGREES  DEGREES       DB      DB      DB        RATIO     DEG.              VOLTS/M    DEGREES      VOLTS/M    DEGREES				   .00      .00    -999.99   -3.23   -3.23     .00000   -90.00  LINEAR    0.00000E+00   -81.39    7.35700E-05  -195.64				*/				line = readline();								while (line != "")				{					stringstream ss(line);									theta.push_back(read_fixed(ss));					phi.push_back(read_fixed(ss));					power_v.push_back(read_fixed(ss)); 					power_h.push_back(read_fixed(ss));					power_t.push_back(read_fixed(ss));					pol_axial_ratio.push_back(read_fixed(ss));					pol_tilt.push_back(read_fixed(ss));														ss >> pol_sense;										E_theta_mag.push_back(read_sci(ss));					E_theta_phase.push_back(read_fixed(ss));						E_phi_mag.push_back(read_sci(ss));					E_phi_phase.push_back(read_fixed(ss));						line = readline();					n_items++;				}				cout << "Radiation pattern: " << n_items << " lines" << endl;			}			}	}	bool equalto(const RadiationInput& ai)	{		if (difference(ai) > 1e-4)			return false;		return true;	}	double difference(const RadiationInput& ai)	{		double ret = 0.0;		// compart angles		if (n_items != ai.n_items)			return 1;				for (long i=0; i < n_items;i++)		{			if (theta[i] != ai.theta[i])				return 1;			if (phi[i] != ai.phi[i])				return 1;							try			{				ret += diff(power_v[i], ai.power_v[i]);				ret += diff(power_h[i], ai.power_h[i]);				ret += diff(power_t[i], ai.power_t[i]);				if (power_v[i] > -999.0)				{					ret += diff(pol_axial_ratio[i], ai.pol_axial_ratio[i]);					ret += diff(pol_tilt[i], ai.pol_tilt[i]);									ret += diff(deg_polar(E_theta_mag[i],E_theta_phase[i]), deg_polar(ai.E_theta_mag[i],ai.E_theta_phase[i]));					ret += diff(deg_polar(E_phi_mag[i],E_phi_phase[i]), deg_polar(ai.E_phi_mag[i],ai.E_phi_phase[i]));				}			}			catch (string message)			{				cout << "Diff at [" << theta[i] << "," << phi[i] << "] : " << message << endl;			}		}		return  ret;	};};#endif /* __Radiation_Input__ */

⌨️ 快捷键说明

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