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

📄 ehfield.cpp

📁 计算了在有耗介质中半波天线的近场和原场的电场和磁场分量
💻 CPP
字号:
#include "EHfield.h"

double r;
double SINTH;
double COSTH;

Mparameter P;

//将所求的媒质参数赋给天线运算
void Esetting(Mparameter Z)
{
	P=Z;
}
////////////////////////////////////////////////////////////////////////
//
//                            目  标  点
//
////////////////////////////////////////////////////////////////////////

//在直角坐标系中设置目标点的位置
Observe verticalsetaimstation(doublexyzVector p)
{
	Observe Z;
	double temp,x,y,z;

	x=p.x;
	y=p.y;
	z=p.z;

	r=sqrt(x*x+y*y+z*z);
	Z.r=r;

	SINTH=sqrt(x*x+y*y)/r;
	COSTH=z/r;
	Z.SINTH=SINTH;
	Z.COSTH=COSTH;
	
	Z.THINC=acos(z/r);

	temp=asin(x/sqrt(x*x+y*y));
	if(y>=0)
		if(x>0)
			Z.PHINC=temp;
		else
			Z.PHINC=PI+temp;
	else
		if(x>0)
			Z.PHINC=PI+temp;
		else
			Z.PHINC=2*PI+temp;

	return Z;
}

//在球坐标系中设置目标点的位置
Observe circlepolarsetaimstation(doubleVector R)
{
	Observe Z;
	double THINC;

	r=R.R;
	Z.r=r;
	THINC=R.thinc;
	Z.THINC=THINC;
	SINTH=sin(THINC);
	Z.SINTH=SINTH;
	COSTH=cos(THINC);
	Z.COSTH=COSTH;
	
	if(THINC == PI)
		Z.SINTH=0;
	if(THINC == PI/2)
		Z.COSTH=0;
	
	Z.PHINC=R.phinc;

	return Z;
}

////////////////////////////////////////////////////////////////////////
//
//                             矢  量  位(thinc分量)
//
////////////////////////////////////////////////////////////////////////
doubleComplex Athvector(double L)                     
{	
	double k;
	k=4*PI/doubleComplexAbs(P.K);
	
	if(r>k)
		return PthAvector(L);
	else
		return EthAvector(L);
}

////////////////////////////////////////////////////////////////////
////                            远    场
doubleComplex PthAvector(double L)
{
	doubleComplex PthAvector,X;
	
	X=doubleCintegrat(-L,L,PthAvectorcell);
	PthAvector=doubleDMpy(1/(4*PI),X);
	
	return PthAvector;
}

//矢量位被积函数
doubleComplex PthAvectorcell(double zi)
{
	//cout<<"Avectorcell\n";
	double R,rx,z,kc;
	doubleComplex x,y;
	doubleComplex lineI,PthAvectorcell;
	
	rx=r*SINTH;
	z=r*COSTH;
	R=sqrt(rx*rx+(z-zi)*(z-zi));
	kc=R+zi*COSTH;
	
//	x=doubleDMpy(R,P.K);
	x.re=kc*P.K.re;
	x.im=kc*P.K.im;
	y.re=x.im;
	y.im=-x.re;
	y=doubleDMpy(1/R,expC(y));

	lineI=Iline(zi);       //天线上电流的分布
	PthAvectorcell=doubleCMpy(lineI,y);
	
	return PthAvectorcell;
}


////////////////////////////////////////////////////////////////////
////                            近    场
//矢量位被积函数
doubleComplex EthAvectorcell(double zi)
{
	//cout<<"Avectorcell\n";
	double R,rx,z,kc;
	doubleComplex a,b,c;
	
	doubleComplex x,y;
	doubleComplex lineI,EthAvectorcell;
	
	rx=r*SINTH;
	z=r*COSTH;
	R=sqrt(rx*rx+(z-zi)*(z-zi));
	kc=R+zi*COSTH;
	//x=doubleDMpy(R,P.K);
	//y=doubleComplexSet(x.im,-x.re);
	x.re=kc*P.K.re;
	x.im=kc*P.K.im;
	y.re=x.im;
	y.im=-x.re;
	
	a=doubleComplexSet(1/R,0);
	b=doubleDMpy(-pow(R,-2),doubleCDiv(P.K));
	b=doubleComplexSet(-b.im,b.re);

	a=doubleCAdd(a,b);
	c=doubleDMpy(-pow(R,-3),doubleCDiv(doubleCMpy(P.K,P.K)));
	a=doubleCAdd(a,c);

	y=doubleCMpy(a,expC(y));

	lineI=Iline(zi);       //天线上电流的分布
	EthAvectorcell=doubleCMpy(lineI,y);
	
	return EthAvectorcell;
}

doubleComplex EthAvector(double L)
{
	doubleComplex EthAvector,X;
	
	X=doubleCintegrat(-L,L,EthAvectorcell);
	EthAvector=doubleDMpy(1/(4*PI),X);
	
	return EthAvector;
}

////////////////////////////////////////////////////////////////////////
//
//                             矢  量  位(r分量)
//
////////////////////////////////////////////////////////////////////////
doubleComplex Arvector(double L)                     
{
	double k;
	k=4*PI/doubleComplexAbs(P.K);
	
	if(r>k)
		return doubleComplexSet(0,0);
	else
		return ErAvector(L);
}

////////////////////////////////////////////////////////////////////
////                            近    场

//辛普生法求矢量位函数
doubleComplex ErAvector(double L)
{
	doubleComplex ErAvector,X;
	
	X=doubleCintegrat(-L,L,ErAvectorcell);
	ErAvector=doubleDMpy(1/(2*PI),X);
	
	return ErAvector;
}
//矢量位被积函数
doubleComplex ErAvectorcell(double zi)
{
	//cout<<"Avectorcell\n";
	double R,rx,z,kc;
	doubleComplex a,b;
	
	doubleComplex x,y;
	doubleComplex lineI,ErAvectorcell;
	
	rx=r*SINTH;
	z=r*COSTH;
	R=sqrt(rx*rx+(z-zi)*(z-zi));
	kc=R+zi*COSTH;
	//x=doubleDMpy(R,P.K);
	//y=doubleComplexSet(x.im,-x.re);
	x.re=kc*P.K.re;
	x.im=kc*P.K.im;
	y.re=x.im;
	y.im=-x.re;

//	a=doubleDMpy(pow(R,-2),doubleCDiv(P.K));
//	a=doubleComplexSet(a.im,-a.re);
	b=doubleDMpy(pow(R,-2),doubleCDiv(P.K));
	a.re=b.im;
	a.im=-b.re;

	b=doubleDMpy(-pow(R,-3),doubleCDiv(doubleCMpy(P.K,P.K)));
	a=doubleCAdd(a,b);

	y=doubleCMpy(a,expC(y));

	lineI=Iline(zi);       //天线上电流的分布
	ErAvectorcell=doubleCMpy(lineI,y);
	
	return ErAvectorcell;
}

////////////////////////////////////////////////////////////////////////
//
//                        求 电 磁 场 各 分 量
//
////////////////////////////////////////////////////////////////////////
//当目标点是球坐标系的作标点时
EH EHivalue(Mparameter P,doubleVector Z)
{	
	Esetting(P);
	circlepolarsetaimstation(Z);
	double L;
	L=Antennaparameter();

	return EHisolve(L);
}

//当目标点是球坐标系的作标点时
EH EHivalue(Mparameter P,double L,doublexyzVector Z)
{	
	Esetting(P);
	verticalsetaimstation(Z);

	return EHisolve(L);
}

//求解电磁场的各分量
EH EHisolve(double L)
{
	EH Efield;
	double x;
	doubleComplex E,H;
	doubleComplex Avect;

	Avect=Athvector(L);
	x=P.w * P.XMU * SINTH;
	E.im=-Avect.re * x;
	E.re=Avect.im * x;
	Efield.Eth=E;
	Efield.EthM=sqrt(E.re*E.re+E.im*E.im);

	H=doubleDMpy(SINTH,doubleCMpy(P.K,Avect));
	Efield.Hph=doubleComplexSet(-H.im,H.re);
	Efield.HphM=sqrt(H.re*H.re+H.im*H.im);;

	Avect=Arvector(L);
	x= P.w * P.XMU * COSTH;
	E.im=-Avect.re * x;
	E.re=Avect.im * x;
	Efield.Er=E;
	Efield.ErM=sqrt(E.re*E.re+E.im*E.im);

	return Efield;
}

⌨️ 快捷键说明

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