📄 ehfield.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 + -