电磁学小作业(天线概述_电基本振子的辐射分析)

//--------------------------------------------------------------------------------------------------
//电磁学小作业(天线概述_电基本振子的辐射分析)
//题目描述:
//01.参考书目:ISBN 978-7-03-025068-1.
//01.天线是辐射(或接收)电磁波的工具.
//[A.矢量位和标量位的定义]--------------------------------------------------------------------------------------------
//01.根据时变场的磁通连续性定律(MaxWell第三方程):▽·B=0;
//02.由于矢量场B为无源场(无通量源),则它必为有旋场,且必然存在一个矢量,记为A,使得:B=▽×A.称为矢量位A(矢量磁位).
//03.将B=▽×A代入电磁感应定律(MaxWell第二方程):▽×E=-d(B)/d(t)=-d(▽×A)/d(t)=-▽×d(A)/d(t);即▽×(E+dA/dt)=0.
//04.由于矢量场(E+dA/dt)是一个无旋场,则它必然是一个标量场,且必然存在一个标量,记为Φ,使得(E+dA/dt)=-▽·Φ.(Φ标量电位).
//05.在许多情况下,求解位函数A,Φ比求解矢量函数E,H来得方便.一旦求得A和Φ就可以按照定义求得电场E和磁场H.
//06.可得:E=-d(A)/d(t)-▽·Φ;H=(▽×A)/μ.
//07.赫姆霍兹定理说明:只有同时给定一个矢量场的旋度和散度,这个矢量场才可能唯一的确定.
//08.上面已经给出了矢量A的旋度(B=▽×A),还需要规定矢量A的散度(▽·A);原则上讲,矢量A的散度(▽·A)可以任意规定.
//09.为了计算方便,采用洛伦兹规范(Lorentz):(▽·A)=-με*(dΦ)/(dt).
//10.对于时谐场,上述定义都可表示为复数形式:B=▽×A;E=-jωA-(▽·Φ);(▽·A)=-jωμεΦ.
//11.对于时谐场,把B=▽×A;E=-jωA-(▽·Φ)代入MaxWell第一方程:▽×H=J+jωεE;得到:(▽2A)+ω*ωμεA=-μJ.
//12.对于时谐场,把E=-jωA-(▽·Φ)代入MaxWell第四方程:(▽·E)=ρ/ε;得到:(▽2Φ)+ω*ωεμΦ=-ρ/ε.
//13.上面两个方程称为A和Φ的赫姆霍兹方程,这是两个相互独立的方程,可以分别求出A和Φ:
//14.解得:A(r)=(μ/4π)*∫(v){[J(r)*exp(-jk(|r-r'|))]/|r-r'|}d(v).
//15.解得:Φ(r)=(1/4πε)*∫(v){[ρ(r)*exp(-jk(|r-r'|))]/|r-r'|}d(v).
//16.其中:k=ω*sqrt(με),称为波数.
//17.     r-观察点的位置矢量;r'-源点的位置矢量;|r-r'|-观察点和源点之间的距离.
//[B.电基本振子的辐射分析]----------------------------------------------------------------------------------------------
//17.基本振子是最简单的天线形式;电基本振子是构成各类线性天线的基本单元;
//18.电基本振子是一段载有高频电流的短导线;其长度dl远小于波长λ;导线上的电流可以近似认为是等幅同相的.
//19.采用球坐标系:
//20.三个分量:rθφ:r-到球心的距离;θ-纬度;φ-经度.
//21.三个方向分量的增量方向:ar-由所在点地面指向太空;aθ-点在子午面的切线方向;aφ-所在点平行于赤道面的切线方向.
//22.因为导线直径d远小于导线长度dl,而dl<<λ;所以J(r)d(v)=az·(I*dl);|r-r'|≈r.体积分写成线积分,上下限(-0.5dl,0.5dl).
//23.代入到(14),得到电基本振子的矢量位:A(r)=az·(μ*I*dl/4π*r)*exp(-jkr).
//24.A(r)在球坐标系中的三个分量为:
//25.Ar=Az*cos(θ)=(μ*I*dl/4π*r)*exp(-jkr)*cos(θ);
//26.Aθ=-Az*sin(θ)=-(μ*I*dl/4π*r)*exp(-jkr)*sin(θ);
//27.Aφ=0;
//28.由此可以得到电基本振子产生的磁场(由A求H):
//29.H=(1/μ)*(▽×A)=|ar·1/(r*r*sin(θ))   aθ·1/(r*sin(θ))	aφ·(1/r) |
//					  |    d()/d(r)				d()/d(θ)        d()/d(φ) |
//					  |    Ar                   r*Aθ        r*sin(θ)*Aφ |
//30.将Ar,Aθ,Aφ代入到上式,得到:Hr=Hθ=0;Hφ=[k*k*I*dl*sin(θ)/4π]*exp(-jkr)*[j/(kr)+1/(k*k*r*r)];
//31.已经知道磁场,可以由磁场求得电场(由H求E):
//32.E=(1/jωε)*(▽×H)=|ar·1/(r*r*sin(θ))   aθ·1/(r*sin(θ))	aφ·(1/r) |
//					     |    d()/d(r)				d()/d(θ)        d()/d(φ) |
//					     |    Hr                   r*Hθ        r*sin(θ)*Hφ  |
//33.将Hr,Hθ,Hφ代入到上式,得到:
//34.Er=[2*k*k*I*dl*cos(θ)/4πωε]*exp(-jkr)*[1/(k*k*r*r)-j/(k*k*r*r)];
//35.Eθ=[k*k*k*I*dl*sin(θ)/4πωε]*exp(-jkr)*[j/(k*r)+1/(k*k*r*r)-j/(k*k*k*r*r*r)];
//36.Eφ=0;
//37.观察计算结果可知:沿z轴放置的电基本振子产生的电场仅有Er(径向),Eθ(子午面切向)两个方向;磁场仅有Hφ(赤道面切向)方向.
//38.这3个非零分量包含r的不同幂次变化量;当kr<<1(即r<<λ/2π)时称为近区场;当kr>>1(即r>>λ)时称为远区场;
//[C.近区场的电磁场分析]----------------------------------------------------------------------------------------------
//39.当r<<λ或kr<<1的空间区域称为近区;此时exp(-jkr)≈1;1/(kr)<<1/(k*k*r*r)<<1/(k*k*k*r*r*r);近区电磁场可简化为:
//40.Er≈-j*[2*I*dl*cos(θ)/4πωε*r*r*r].
//41.Eθ≈-j*[I*dl*sin(θ)/4πωε*r*r*r].
//42.Hφ≈[I*dl*sin(θ)/4π*r*r].
//43.观察表达式可知:
//44.Er,Eθ与静电场问题中电偶极子的电场相似;Hφ和恒定电流源的磁场相似;所以近区又称为似稳区,近区场又称为似稳场.
//45.近区场随距离r的增大而迅速减小,因此在离开天线较远的地方,近区场变得很小.
//46.电场相位滞后磁场相位90°,因而坡印廷矢量是纯虚数,近区场每周期平均辐射的功率为零;近区场的能量束缚在天线的周围.
//47.在近区场内,电磁能量在源和场之间来回振荡,在一个周期内,源供给场的能量等于场返回源的能量,没有能量向外辐射,称为感应场.
//[D.远区场的电磁场分析]----------------------------------------------------------------------------------------------
//48.当r>>λ或kr>>1的空间区域称为远区;此时1/(kr)>>1/(k*k*r*r)>>1/(k*k*k*r*r*r);远区电磁场可简化为:
//49.Er≈0;
//50.Eθ≈[j*k*k*I*dl*sin(θ)/4πωεr]*exp(-jkr)=j*[I*dl*sin(θ)*sqrt(μ/ε)/2*λ*r]*exp(-jkr).
//51.Hφ≈[j*k*I*dl*sin(θ)/4πr]*exp(-jkr)=j*[I*dl*sin(θ)/2*λ*r]*exp(-jkr).
//52.观察表达式可知:
//53.远区场仅有Eθ与Hφ两个分量,两者在时间上同相,在空间上互相垂直,并与矢径方向垂直.
//54.坡印廷矢量S=0.5*Re[E×H(*)]是纯实数,方向沿着矢径r方向;电基本振子在远区的场是一个沿着径向向外传播的横电磁波.
//55.电磁能量离开场源向空间辐射,不再返回,这种场称为辐射场.
//56.Eθ与Hφ两个分量均与(1/r)成正比,是由扩散引起的;当距离r增加时,场强相对近区场减少得缓慢,因此可以传播到离天线很远的地方.
//57.电基本振子的辐射场与sin(θ)成正比;即在不同的θ方向上,它的辐射强度是不同的.
//58.在θ等于0°和180°方向上,即振子轴线的方向上辐射为0;
//59.在θ等于90°方向上,即通过振子中心并垂直振子轴线的方向上,辐射最强;因此辐射场是有方向性的.
//60.Eθ与Hφ的比值:Eθ/Hφ=sqrt(μ/ε)=η(Ω),是一个实数,它具有阻抗的量纲,称为波阻抗;在自由空间中,η=η0=120π(Ω).
//61.由于电场和磁场成比例关系,在对天线的远区场进行研究时,一般只对电场进行研究,磁场的特点可以通过电场的特点得到.
//62.在自由空间中,η=η0=120π(Ω).代入到式子(50)(51),得到自由空间中电流元辐射场的实用表达式:
//63.E=aθ·Eθ=aθ·[j*60π*I*dl*sin(θ)/λ*r]*exp(-jkr).
//64.H=aφ·Hφ=aφ·[j*I*dl*sin(θ)/2*λ*r]*exp(-jkr).
//65.将电场Eθ,磁场Hφ表示为瞬时值形式:
//66.E=aθ·Eθ=aθ·[I*dl*sin(θ)/2*λ*r]*η*cos(wt-kr+π/2).
//67.H=aφ·Hφ=aφ·[I*dl*sin(θ)/2*λ*r]*cos(wt-kr+π/2).
//68.由(wt-kr+π/2)=常数,得到:vp=d(r)/d(t)=w/k=1/sqrt(με)=3.0*10^8(m/s).
//69.远区电场和磁场空间相互垂直,沿ar方向传播的净功率不为0;
//70.平均坡印廷矢量S(平均)=0.5*Re[E×H(*)]=ar·0.5*exp[I*dl*sin(θ)/2*λ*r,2]*η.
//71.电基本振子向空间辐射的总功率称为该天线的辐射功率,记为Pr:
//72.Pr=∮S(平均)*d(s)=∮ar·{0.5*exp[I*dl*sin(θ)/2*λ*r,2]*η}*d(s)=(转换为球坐标形式)=
//     =∫(0,r)∫(0,π)∫(0,2π){0.5*exp[I*dl*sin(θ)/2*λ*r,2]*120π}*(r^2)*sin(θ)*d(θ)*d(φ)
//     =∫(0,2π)d(φ)∫(0,π){15*π*(I^2)*[(dl/λ)^2]*exp(sin(θ),3)}d(θ)
//     =30[(π*I*dl/λ)^2]∫(0,π) exp(sin(θ),3)d(θ)=30[(π*I*dl/λ)^2]*(4/3)
//     =40[(π*I*dl/λ)^2]
//73.由上式可知,提高天线辐射能量有两条途径:a.加大电流I;b.加大天线尺寸dl.
//74.在r=常数的球面上,相位处处相同,但电磁场的振幅不均匀(与纬度角θ有关),所以远区电磁波是非均匀球面波.
//75.在电磁波传播方向ar上,Er=0,Hr=0,不存在远区场强的分量,所以它是横电磁波(TEM波).
//76.场强的振幅随θ角的变化而变化;即电基本振子的辐射在E面(电场矢量所在平面)(子午面)是有方向性的.
//77.场强的振幅不随φ角的变化而变化;即电基本振子的辐射在H面(磁场矢量所在平面)(赤道平行面)是无方向性的.
//78.由以上分析可以看出,电基本振子的远区场具有平面波的性质,这是近区场所不具备的.
//79.在一般的应用中,接收天线处于发射天线的远区,因此,在以后对天线的研究中主要是研究天线远区场的特性.
//----------------------------------------------------------------------------------------------------------------------
//程序编制要求:
//1.已知电流幅值I,振动频率f;媒质相对介电常数εr,相对磁导率μr.
//2.计算电场的幅值E,磁场的幅值H及传播特性.
//3.绘制电基本振子的(远区)电磁场传播示意图.
//--------------------------------------------------------------------------------------------------------------------
#include <graphics.h>//包含Easyx模拟TC的BGI绘图库头文件
#include <math.h>//包含数学运算头文件
#include <iostream.h>//
#define DD 40//宏定义标题边框距离
#define DW 10//宏定义宽度边框距离
#define DH 10//宏定义高度边框距离
#define DC 200//宏定义控件区域宽度
#define PI 3.1415926//宏定义圆周率
#define mu0 4.0*PI//宏定义μ0(E-7)
#define yp0 1.0/(36*PI)//宏定义ε0(E-9)
//辅助颜色------------------------------------------
#define c1 RGB(38,47,86)//宏定义辅助线颜色1
#define c2 RGB(38,47,86)//宏定义辅助线颜色2
#define c3 RGB(255,255,255)//宏定义文字及边框颜色
//曲线颜色------------------------------------------
#define cc1 RGB(0,255,255)//宏定义曲线颜色4(青色)
#define cc2 RGB(0,255,0)//宏定义曲线颜色2(绿色)
#define cc3 RGB(150,100,0)//宏定义曲线颜色3(黄色)
//定义结构体-------------------------------------------------------------------------------------------------------
typedef struct points
{
	double x,y,z,m,n;//定义双精度变量(前3个计算坐标+后2个投影坐标)
}DPOINT;//结束结构体
//窗口全局变量-----------------------------------------------------------------------------------------------------
int W = GetSystemMetrics(SM_CXSCREEN);//获取整个屏幕右下角X坐标
int H = GetSystemMetrics(SM_CYSCREEN);//屏幕Y坐标 
int c_h=36;//定义控件高度
double ud=2.0/3.0;//窗口上片比例
double lr=1.0/2.0;//窗口左片比例
//E面方向图窗口全局变量
double x_1=DW;//片区1起点x
double y_1=H-DH-(1-ud)*(H-DD-DH);//片区1起点y
double x_1a=x_1+0.5*lr*(W-2.0*DW-DC);
double y_1a=y_1+0.9*(1-ud)*(H-DD-DH);
//H面方向图窗口全局变量
double x_2=x_1+lr*(W-2.0*DW-DC);//片区2起点x
double y_2=y_1;//片区2起点y
double x_2a=x_2+0.5*lr*(W-2.0*DW-DC);
double y_2a=y_2+0.5*(1-ud)*(H-DD-DH);
//三维示意面窗口全局变量
double aaa=(4.0/5.0);//宏定义三维原点占x比例
double bbb=(3.5/5.0);//宏定义三维原点占y比例
double x_3=DW+(W-2.0*DW)*(1-aaa);//三维原点x位置
double y_3=DD+bbb*ud*(H-DD-DH);//三维原点y位置
double scale_3=aaa*(W-2.0*DW)/1000.0;//片区3全局比例
double d_B=(400.0)*scale_3*(sqrt(2.0)/4.0);//投影增量
double xmin=x_3-d_B;//
double ymin=y_3+d_B;//
//数据全局变量
char is1[20]="1.0";//预定义:1.振子长度dl(m)
char is2[20]="10";//2.电流幅值I(A)
char is3[20]="100";//3.振动频率f(MHz)
char is4[20]="1";//4.[本]相对介电εr
char is5[20]="1";//5.[本]相对磁导μr
char is10[20]="100";//10.距离r(m)
char is11[20]="45";//11.纬度角θ(°)
char is6[20],is7[20],is8[20],is9[20],is12[20],is13[20],is14[20],is15[20],is16[20];//定义字符数组(存储字符串)
double d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d11_r,d12,d13,d14,d15,d16,d3_r,d15_a,d16_a,ym1,ymax,ni;//(存储计算值)
DPOINT pt1,pt2,pt3,pt4,pt5,pt6,pt7,pt8,pt9,pt10,pt11,pt12,pt13,pt14,pt15,pt16,pt17,pt18,pt19,pt20;//
DPOINT pt1a,pt2a,pt3a,pt4a,pt5a,pt6a,pt7a,pt8a,pt9a,pt10a,pt11a,pt12a,pt13a,pt14a,pt15a,pt16a,pt17a,pt18a,pt19a,pt20a;//
int i,j,k;//
double fi_r=60.0;//经度角(随机取值)
double value;//定义双精度变量
char stt[10];//定义字符数组	
//函数声明---------------------------------------------------------------------------------------------------------
void sub_frame();//绘制框架子函数
void sub_calculate();//计算数据子函数
void cross1(double x1,double y1,double sec,double cc);//交叉点样式1
void cross2(double x1,double y1,double sec,double cc);//交叉点样式2
void dline(DPOINT x1,DPOINT x2,double cc);//根据两点和颜色绘制线段(辅助线和轮廓线)
void draw_equator(double R,double fi,double color);//绘制子午圆
void draw_meridian(double R,double xt,double color);//绘制赤道圆
void func_P(double xx,double yy,double zz,double *mm,double *nn);//三维坐标对绘图区投影
void draw_pt();//绘制点位
void draw_ol();//绘制轮廓线
void draw_polar_x();//绘制极坐标方向图(θ方向图)
void draw_polar_f();//绘制极坐标方向图(Φ方向图)
//主函数-----------------------------------------------------------------------------------------------------------
void main()
{
	sub_frame();//绘图初始化
	MOUSEMSG m;//定义鼠标消息 
	while(true)//循环
	{
		m=GetMouseMsg();//获取一条鼠标消息 
		switch(m.uMsg)//根据获得的消息选择分支
		{
		case WM_LBUTTONDOWN://鼠标左键单击时判断数据输入
			{
				//判断鼠标位置是否在指定的控件区域
				//A.获取原始数据(横坐标在输入区域时输入数据)-------------------------------
				if(m.x>=W-DW-DC && m.x<=W-DW)
				{
					//1.振子长度dl(m):-----------------------------------------------------
					if(m.y>=H-DH-16*c_h+1 && m.y<=H-DH-15*c_h-1)//
					{
						InputBox(is1,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-16*c_h+1,W-DW,H-DH-15*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-16*c_h+15,is1);//写控件字符串
					}//结束if
					//2.电流幅值I(A):-----------------------------------------------------
					if(m.y>=H-DH-15*c_h+1 && m.y<=H-DH-14*c_h-1)//
					{
						InputBox(is2,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-15*c_h+1,W-DW,H-DH-14*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-15*c_h+15,is2);//写控件字符串
					}//结束if
					//3.振动频率f(MHz):-----------------------------------------------------
					if(m.y>=H-DH-14*c_h+1 && m.y<=H-DH-13*c_h-1)//
					{
						InputBox(is3,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-14*c_h+1,W-DW,H-DH-13*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-14*c_h+15,is3);//写控件字符串
					}//结束if
					//4.[本]相对介电εr:-----------------------------------------------------
					if(m.y>=H-DH-13*c_h+1 && m.y<=H-DH-12*c_h-1)//
					{
						InputBox(is4,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-13*c_h+1,W-DW,H-DH-12*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-13*c_h+15,is4);//写控件字符串
					}//结束if
					//5.[本]相对磁导μr:-----------------------------------------------------
					if(m.y>=H-DH-12*c_h+1 && m.y<=H-DH-11*c_h-1)//
					{
						InputBox(is5,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-12*c_h+1,W-DW,H-DH-11*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-12*c_h+15,is5);//写控件字符串
					}//结束if
					//10.距离r(m):-----------------------------------------------------
					if(m.y>=H-DH-7*c_h+1 && m.y<=H-DH-6*c_h-1)//
					{
						InputBox(is10,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-7*c_h+1,W-DW,H-DH-6*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-7*c_h+15,is10);//写控件字符串
					}//结束if
					//11.纬度角θ(°):-----------------------------------------------------
					if(m.y>=H-DH-6*c_h+1 && m.y<=H-DH-5*c_h-1)//
					{
						InputBox(is11,9,"请输入数据");//读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC/2+10,H-DH-6*c_h+1,W-DW,H-DH-5*c_h);
						outtextxy(W-DW-DC+DC/2+15,H-DH-6*c_h+15,is11);//写控件字符串
					}//结束if
				}//结束if(横坐标在输入区域时输入数据)
				sub_frame();//重绘框架
				//B.计算并绘图(横坐标在绘图区域时计算绘图)---------------------------------
				if(m.x>=DW && m.x<=W-DW-DC)
				{
					sub_calculate();//调用计算绘图函数
				}//结束if
				break;//
			}//结束case(结束鼠标左键单击事件消息处理)
		case WM_RBUTTONDOWN://鼠标移动的时候画个空心的圆
			return;//返回while
		}//结束switch(结束鼠标消息)
	}//结束while
}//结束主函数
//绘制框架子函数
void sub_frame()
{
	//1.全屏效果---------------------------------------------------------------------------
	initgraph(W,H);//初始化绘图窗口
	HWND hWnd = GetHWnd();//获取窗口句柄
	LONG style = GetWindowLong(hWnd,-16);//获得窗口风格
	style = style & ~WS_CAPTION & ~WS_SIZEBOX; //窗口全屏显示且不可改变大小
	SetWindowLong(hWnd,-16,style);//设置窗口风格
	SetWindowPos(hWnd, NULL,0,0,W,H,SWP_NOZORDER);//改变窗口位置,尺寸和Z序
	//ShowCursor(FALSE);//显示时隐藏鼠标
	//------------------------------------------------------------------------------------
	//2.绘制工作区边框
	setcolor(c3);
	rectangle(DW,DD,W-DW,H-DH);//外边框
	rectangle(W-DW-DC,DD,W-DW,H-DH);//控件区域边框
	//5.输出标题
	setfont(16,0,"黑体");
	outtextxy(5,10,"电磁学小作业(天线概述_电基本振子的辐射分析)");
	//6.输出简单说明
	RECT r={W-DW-DC+10,DD+10,W-DW-10,H-DH-10};//
	setfont(12,0,"宋体");//
	drawtext("电磁学小作业:\n \n \
				天线概述_电基本振子的辐射分析\
				\
				\n\n\
				操作说明:\n\n\
				鼠标左键  : 数据输入\n\
				鼠标右键  : 退出程序\n\
			\n\
			1~5为输入数据   6~16为计算数据\n\
			\n\n\
			\n\n\
			\
			\n", &r, DT_WORDBREAK);//
	//7.调整说明文字下面的矩形控件
	int c_x1=W-DW-DC,c_x2=W-DW;//控件左右x坐标
	int c_y1=H-DH;//第1个控件下y坐标
	for(int i=1;i<=16;i++)
	{
		rectangle(c_x1,c_y1,c_x2,c_y1-c_h);//
		c_y1=c_y1-c_h;
	}//结束for
	//8.绘制控件说明文字
	setcolor(RGB(220,34,34));//砖红
	outtextxy(c_x1+10,H-DH-16*c_h+15,"1.振子长度dl(m):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-15*c_h+15,"2.电流幅值I(A):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-14*c_h+15,"3.振动频率f(MHz):");//输出字符串模拟控件文字	
	outtextxy(c_x1+10,H-DH-13*c_h+15,"4.[本]相对介电εr:");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-12*c_h+15,"5.[本]相对磁导μr:");//输出字符串模拟控件文字
	setcolor(c3);	
	outtextxy(c_x1+10,H-DH-11*c_h+15,"6.圆频率w(MHz):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-10*c_h+15,"7.波数k(rad/m):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-9*c_h+15,"8.相速度Up(E8m/s):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-8*c_h+15,"9.波长λ(m):");//输出字符串模拟控件文字
	setcolor(RGB(240,230,140));//柠檬黄
	outtextxy(c_x1+10,H-DH-7*c_h+15,"10.距离r(m):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-6*c_h+15,"11.纬度角θ(°):");//输出字符串模拟控件文字
	setcolor(c3);
	outtextxy(c_x1+10,H-DH-5*c_h+15,"12.[H]幅值H0(A/m):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-4*c_h+15,"13.[本]本征阻抗η(Ω):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-3*c_h+15,"14.[E]幅值E0(V/m):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-2*c_h+15,"15.[S]平均能流密度(w/m2):");//输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-1*c_h+15,"16.[S]天线总功率Pr(w):");//输出字符串模拟控件文字
	//8.初始化原始数据
	outtextxy(W-DW-DC+DC/2+65,H-DH-16*c_h+15,is1);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-15*c_h+15,is2);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-14*c_h+15,is3);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-13*c_h+15,is4);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-12*c_h+15,is5);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-7*c_h+15,is10);//写控件字符串
	outtextxy(W-DW-DC+DC/2+65,H-DH-6*c_h+15,is11);//写控件字符串
}//结束子程序
//计算数据子函数
void sub_calculate()
{
	//1.原始数据转化为双精度数
	d1=atof(is1);//1.振子长度dl(m)
	d2=atof(is2);//2.电流幅值I(A)
	d3=atof(is3);//3.振动频率f(MHz)
	d4=atof(is4);//4.[本]相对介电εr
	d5=atof(is5);//5.[本]相对磁导μr
	d10=atof(is10);//10.距离r(m)
	d11=atof(is11);//11.纬度角θ(°)
	d11_r=d11*PI/180.0;//
	//2.根据数据计算要求项目---------------------------------------------------------------------------
	d6=2*PI*d3;//6.圆频率w(MHz)
	d7=0.01*d6*sqrt(d4*d5*yp0*mu0);//7.波数k(rad/m)
	d8=3.0/sqrt(d4*d5);//8.相速度Up(E8m/s)
	d9=2.0*PI/d7;//9.波长λ(m)
	d12=0.5*d2*d1*sin(d11_r)/(d9*d10);//12.[H]幅值H0(A/m))[I*dl*sin(θ)/2*λ*r]
	d13=10.0*sqrt((1.0*d5*mu0)/(d4*yp0));//13.[本]本征阻抗η(Ω)	
	d14=d12*d13;//14.[E]幅值E0(V/m)
	d15=0.5*d12*d14;//15.[S]平均能流密度(w/m2)0.5*exp[I*dl*sin(θ)/2*λ*r,2]*η.
	d16=40.0*pow(PI*d2*d1/d9,2.0);//16.[S]天线总功率Pr(w)40[(π*I*dl/λ)^2]
	//3.将计算结果转化为字符串--------------------------------------------------------------------------
	gcvt(d6,4,is6);//
	gcvt(d7,4,is7);//
	gcvt(d8,4,is8);//
	gcvt(d9,4,is9);//
	gcvt(d12,4,is12);//
	gcvt(d13,4,is13);//
	gcvt(d14,4,is14);//
	gcvt(d15,4,is15);//
	gcvt(d16,4,is16);//
	//4.将字符串写入控件中
	setfillcolor(BLACK);
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-11*c_h+1,W-DW,H-DH-10*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-11*c_h+15,is6);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-10*c_h+1,W-DW,H-DH-9*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-10*c_h+15,is7);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-9*c_h+1,W-DW,H-DH-8*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-9*c_h+15,is8);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-8*c_h+1,W-DW,H-DH-7*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-8*c_h+15,is9);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-5*c_h+1,W-DW,H-DH-4*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-5*c_h+15,is12);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-4*c_h+1,W-DW,H-DH-3*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-4*c_h+15,is13);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-3*c_h+1,W-DW,H-DH-2*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-3*c_h+15,is14);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-2*c_h+1,W-DW,H-DH-1*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-2*c_h+15,is15);//写控件字符串	
	//------------------------------------------------------------
	fillrectangle(W-DW-DC+DC/2+40,H-DH-1*c_h+1,W-DW,H-DH-0*c_h);
	outtextxy(W-DW-DC+DC/2+45,H-DH-1*c_h+15,is16);//写控件字符串	
	//------------------------------------------------------------
	setcolor(cc1);//说明曲线颜色
	line(W-DW-DC-200,H-DH-10*c_h+10,W-DW-DC-260,H-DH-10*c_h+10);	
	outtextxy(W-DW-DC-200+15,H-DH-10*c_h+5,"1.磁场Hφ");//写控件字符串
	//------------------------------------------------------------
	setcolor(cc2);//说明曲线颜色
	line(W-DW-DC-200,H-DH-9*c_h+10,W-DW-DC-260,H-DH-9*c_h+10);	
	outtextxy(W-DW-DC-200+15,H-DH-9*c_h+5,"2.电场Eθ");//写控件字符串
	//------------------------------------------------------------
	setcolor(cc3);//说明曲线颜色
	line(W-DW-DC-200,H-DH-8*c_h+10,W-DW-DC-260,H-DH-8*c_h+10);	
	outtextxy(W-DW-DC-200+15,H-DH-8*c_h+5,"3.坡印廷矢量Sr(波传播方向)");//写控件字符串
	//------------------------------------------------------------
	//5.绘制工作区坐标线
	//5_1画窗口标线-----------------------------
	setcolor(c3);
	line(x_1,y_1,W-DW-DC,y_1);//上下窗口线
	line(x_2,y_2,x_2,H-DH);//左右窗口线
	setfont(12,0,"黑体");
	outtextxy(DW+10,DD+10,"[电基本振子电磁场示意图]");//
	//5_2三维示意图标线------------------------
	setcolor(c1);
	line(x_3,y_3,W-DW-DC,y_3);//y轴
	line(x_3,y_3,x_3,DD);//z轴
	line(x_3,y_3,xmin,ymin);//x轴
	setcolor(RED);//三个坐标轴颜色
	setfont(20,0,"黑体");
	outtextxy(x_3-20,y_3-10,"O");//原点
	outtextxy(xmin-20,ymin+10,"X");//x轴
	outtextxy(W-DW-DC-20,y_3-10,"Y");//y轴
	outtextxy(x_3-20,DD+20,"Z");//z轴
	//5_3电流元标线----------------------------
	setcolor(RED);
	line(x_3,y_3-20,x_3,y_3+20);//电流元标线
	cross2(x_3,y_3-20,5,cc1);
	cross2(x_3,y_3+20,5,cc1);
	//5_4绘制球坐标辅助标线--------------------
	draw_meridian(300,90,c1);//xoy面
	draw_equator(300,0,c1);//xoz面
	draw_equator(300,90,c1);//yoz面
	//5_5绘制观测点所在标线--------------------
	draw_meridian(300,d11,c1);//赤道平行面
	draw_equator(300,fi_r,c1);//子午面(随机取为60°)
	//5_6绘制辅助点所在标线--------------------
	draw_pt();//绘制点位
	draw_ol();//绘制轮廓线
	//5_7绘制极坐标方向图----------------------
	draw_polar_x();//绘制极坐标方向图(θ方向图)
	draw_polar_f();//绘制极坐标方向图(Φ方向图)
	//6.重新绘制工作区边框
	setcolor(c3);
	rectangle(DW,DD,W-DW,H-DH);//外边框
	rectangle(W-DW-DC,DD,W-DW,H-DH);//控件区域边框	
	//------------------------------------------------------------
}//结束子函数
void func_P(double xx,double yy,double zz,double *x1,double *y1)//三维坐标对绘图区投影
{
	*x1=yy-xx*sqrt(2.0)/4.0;//投影x
	*y1=zz-xx*sqrt(2.0)/4.0;//投影y
	//平移
	*x1=(*x1)+x_3;//
	*y1=y_3-(*y1);//
}//
void cross1(double x1,double y1,double sec,double cc)//交叉点样式1
{
	setcolor(cc);//
	line(x1-sec,y1,x1+sec,y1);//
	line(x1,y1-sec,x1,y1+sec);//
	setcolor(c3);//
}//
void cross2(double x1,double y1,double sec,double cc)//交叉点样式2
{
	setcolor(cc);
	line(x1-sqrt(0.25*PI)*0.5*sec,y1-sqrt(0.25*PI)*0.5*sec,x1+sqrt(0.25*PI)*0.5*sec,y1+sqrt(0.25*PI)*0.5*sec);//
	line(x1+sqrt(0.25*PI)*0.5*sec,y1-sqrt(0.25*PI)*0.5*sec,x1-sqrt(0.25*PI)*0.5*sec,y1+sqrt(0.25*PI)*0.5*sec);//
	setcolor(c3);//
}//
void draw_equator(double R,double fi,double color)//绘制子午圆
{
	DPOINT *p1;//
	p1=new DPOINT[10000];//
	for(j=0;j<=90.0;j++)//xi的取值
	{
		//1.获得点表-------------------------------
		p1[j].z=R*cos(j*PI/180.0);
		p1[j].x=R*sin(j*PI/180.0)*cos(fi*PI/180.0);
		p1[j].y=R*sin(j*PI/180.0)*sin(fi*PI/180.0);	
		//2.三维坐标对绘图区投影-------------------
		func_P(p1[j].x,p1[j].y,p1[j].z,&p1[j].m,&p1[j].n);//投影到绘图坐标
	}//结束for
	setcolor(color);//曲线颜色
	for(j=0;j<90.0;j++)//
	{
		line(p1[j].m,p1[j].n,p1[j+1].m,p1[j+1].n);//
	}//结束for
}//结束子函数
void draw_meridian(double R,double xt,double color)//绘制赤道圆
{
	DPOINT *p1;//
	p1=new DPOINT[10000];//
	for(j=0;j<=90.0;j++)//fi的取值
	{
		//1.获得点表-------------------------------
		p1[j].z=R*cos(xt*PI/180.0);
		p1[j].x=R*sin(xt*PI/180.0)*cos(j*PI/180.0);
		p1[j].y=R*sin(xt*PI/180.0)*sin(j*PI/180.0);		
		//2.三维坐标对绘图区投影-------------------
		func_P(p1[j].x,p1[j].y,p1[j].z,&p1[j].m,&p1[j].n);//投影到绘图坐标
	}//结束for
	setcolor(color);//曲线颜色
	for(j=0;j<90.0;j++)//
	{
		line(p1[j].m,p1[j].n,p1[j+1].m,p1[j+1].n);//
	}//结束for	
}//结束子函数
void draw_polar_x()//绘制极坐标方向图(θ方向图)
{
	double d1=150.0;//极坐标距离		
	DPOINT *p1;//
	p1=new DPOINT[10000];//
	for(j=0;j<=180.0;j++)//xt的取值
	{
		//1.获得点表-------------------------------
		p1[j].x=d1*sin(j*PI/180.0)*cos(j*PI/180.0);
		p1[j].y=d1*sin(j*PI/180.0)*sin(j*PI/180.0);
		p1[j].x=x_1a+p1[j].x;
		p1[j].y=y_1a-p1[j].y;
	}//结束for
	setcolor(cc2);//曲线颜色
	for(j=0;j<180.0;j++)//
	{
		line(p1[j].x,p1[j].y,p1[j+1].x,p1[j+1].y);//
	}//结束for
	//[θ方向示意图标线]------------------------
	setcolor(c1);
	line(x_1a,y_1a,x_1a+150,y_1a);//(θ=0)
	line(x_1a,y_1a,x_1a,y_1a-160);//(θ=90)
	line(x_1a,y_1a,x_1a-150,y_1a);//(θ=180)
	setcolor(c3);//
	setfont(12,0,"黑体");
	outtextxy(x_1+10,y_1+10,"[E面方向图:f(θ)=sin(θ)]");//
	outtextxy(x_1a+150,y_1a,"θ=0");//(θ=0)
	outtextxy(x_1a,y_1a-180,"θ=90");//(θ=90)
	outtextxy(x_1a-180,y_1a,"θ=180");//(θ=180)
	//绘制当前θ点位置
	DPOINT pc1;//
	pc1.x=d1*sin(d11_r)*cos(d11_r);pc1.x=x_1a+pc1.x;//
	pc1.y=d1*sin(d11_r)*sin(d11_r);pc1.y=y_1a-pc1.y;//
	cross1(pc1.x,pc1.y,5,c3);//
	line(x_1a,y_1a,pc1.x,pc1.y);//
}//结束子函数
void draw_polar_f()//绘制极坐标方向图(Φ方向图)
{
	double d1=75.0;//极坐标距离		
	DPOINT *p2;//
	p2=new DPOINT[10000];//
	for(j=0;j<=360.0;j++)//xt的取值
	{
		//1.获得点表-------------------------------
		p2[j].x=d1*cos(j*PI/180.0);
		p2[j].y=d1*sin(j*PI/180.0);
		p2[j].x=x_2a+p2[j].x;
		p2[j].y=y_2a-p2[j].y;
	}//结束for
	setcolor(cc1);//曲线颜色
	for(j=0;j<360.0;j++)//
	{
		line(p2[j].x,p2[j].y,p2[j+1].x,p2[j+1].y);//
	}//结束for
	//[Φ方向示意图标线]------------------------
	setcolor(c1);
	line(x_2a-100,y_2a,x_2a+100,y_2a);//(Φ=0,180)
	line(x_2a,y_2a-100,x_2a,y_2a+100);//(Φ=90,270)
	setcolor(c3);//
	setfont(12,0,"黑体");
	outtextxy(x_2+10,y_2+10,"[H面方向图:Φ]");//
	outtextxy(x_2a+100,y_2a,"Φ=0");//(Φ=0)
	outtextxy(x_2a,y_2a-100,"Φ=90");//(Φ=90)
	outtextxy(x_2a-150,y_2a,"Φ=180");//(Φ=180)
	outtextxy(x_2a,y_2a+100,"Φ=270");//(Φ=270)
}//结束子函数
void dline(DPOINT x1,DPOINT x2,double cc)//根据两点和颜色绘制线段(辅助线和轮廓线)
{
	setcolor(cc);//画线颜色
	line(x1.x,x1.y,x2.x,x2.y);//
	setcolor(c3);//恢复颜色
}//结束子函数
void draw_pt()//绘制点位
{
	setfont(12,0,"宋体");//
	//[pt1点][观察点]----------------------------------------------------------
	pt1.x=300.0*sin(d11_r)*cos(fi_r*PI/180.0);
	pt1.y=300.0*sin(d11_r)*sin(fi_r*PI/180.0);
	pt1.z=300.0*cos(d11_r);//
	func_P(pt1.x,pt1.y,pt1.z,&pt1a.x,&pt1a.y);//
	cross2(pt1a.x,pt1a.y,5,cc1);//
	outtextxy(pt1a.x-5,pt1a.y+5,"pt1");//写控件字符串
	//[pt2点][观察点所在子午面与赤道面的交点]----------------------------------
	pt2.x=300.0*cos(fi_r*PI/180.0);
	pt2.y=300.0*sin(fi_r*PI/180.0);
	pt2.z=0.0;//
	func_P(pt2.x,pt2.y,pt2.z,&pt2a.x,&pt2a.y);//
	cross2(pt2a.x,pt2a.y,5,cc1);//
	outtextxy(pt2a.x-5,pt2a.y+5,"pt2");//写控件字符串
	//[pt3点][观察点所在赤平面与yoz面的交点]----------------------------------
	pt3.x=0.0;//
	pt3.y=300.0*sin(d11_r);//
	pt3.z=300.0*cos(d11_r);//
	func_P(pt3.x,pt3.y,pt3.z,&pt3a.x,&pt3a.y);//
	cross2(pt3a.x,pt3a.y,5,cc1);//
	outtextxy(pt3a.x-5,pt3a.y+5,"pt3");//写控件字符串
	//[pt4点][观察点所在赤平面与xoz面的交点]----------------------------------
	pt4.x=300.0*sin(d11_r);//
	pt4.y=0.0;
	pt4.z=300.0*cos(d11_r);//
	func_P(pt4.x,pt4.y,pt4.z,&pt4a.x,&pt4a.y);//
	cross2(pt4a.x,pt4a.y,5,cc1);//
	outtextxy(pt4a.x-5,pt4a.y+5,"pt4");//写控件字符串
	//[pt5点][观察点在xoy面的投影点]----------------------------------
	pt5.x=pt1.x;pt5.y=pt1.y;pt5.z=0;//
	func_P(pt5.x,pt5.y,pt5.z,&pt5a.x,&pt5a.y);//
	cross2(pt5a.x,pt5a.y,5,cc1);//
	outtextxy(pt5a.x-5,pt5a.y+5,"pt5");//写控件字符串
	//[pt6点][观察点在yoz面的投影点]----------------------------------
	pt6.x=0;pt6.y=pt1.y;pt6.z=pt1.z;//
	func_P(pt6.x,pt6.y,pt6.z,&pt6a.x,&pt6a.y);//
	cross2(pt6a.x,pt6a.y,5,cc1);//
	outtextxy(pt6a.x-5,pt6a.y+5,"pt6");//写控件字符串
	//[pt7点][观察点在xoz面的投影点]----------------------------------
	pt7.x=pt1.x;pt7.y=0;pt7.z=pt1.z;//
	func_P(pt7.x,pt7.y,pt7.z,&pt7a.x,&pt7a.y);//
	cross2(pt7a.x,pt7a.y,5,cc1);//
	outtextxy(pt7a.x-5,pt7a.y+5,"pt7");//写控件字符串
	//[pt8点][观察点在x轴的投影点]----------------------------------
	pt8.x=pt1.x;pt8.y=0;pt8.z=0;//
	func_P(pt8.x,pt8.y,pt8.z,&pt8a.x,&pt8a.y);//
	cross2(pt8a.x,pt8a.y,5,cc1);//
	outtextxy(pt8a.x-5,pt8a.y+5,"pt8");//写控件字符串
	//[pt9点][观察点在y轴的投影点]----------------------------------
	pt9.x=0;pt9.y=pt1.y;pt9.z=0;//
	func_P(pt9.x,pt9.y,pt9.z,&pt9a.x,&pt9a.y);//
	cross2(pt9a.x,pt9a.y,5,cc1);//
	outtextxy(pt9a.x-5,pt9a.y+5,"pt9");//写控件字符串
	//[pt10点][观察点在z轴的投影点]----------------------------------
	pt10.x=0;pt10.y=0;pt10.z=pt1.z;//
	func_P(pt10.x,pt10.y,pt10.z,&pt10a.x,&pt10a.y);//
	cross2(pt10a.x,pt10a.y,5,cc1);//
	outtextxy(pt10a.x-5,pt10a.y+5,"pt10");//写控件字符串
	//[pt11点][原点投影点]-------------------------------------------
	pt11.x=0;pt11.y=0;pt11.z=0;//
	func_P(pt11.x,pt11.y,pt11.z,&pt11a.x,&pt11a.y);//
	//[pt12点][赤道平行面切向点][磁场矢量(Φ方向)]--------------------------------------
	double dis=100.0;//
	pt12.x=pt1.x-dis*sin(fi_r*PI/180.0);//
	pt12.y=pt1.y+dis*cos(fi_r*PI/180.0);//
	pt12.z=pt1.z;//
	func_P(pt12.x,pt12.y,pt12.z,&pt12a.x,&pt12a.y);//
	//[pt13点][子午面切向点][电场矢量(θ方向)]-------------------------------------------
	pt13.x=pt1.x+dis*cos(d11_r)*cos(fi_r*PI/180.0);//
	pt13.y=pt1.y+dis*cos(d11_r)*sin(fi_r*PI/180.0);//
	pt13.z=pt1.z-dis*sin(d11_r);//
	func_P(pt13.x,pt13.y,pt13.z,&pt13a.x,&pt13a.y);//
	//[pt14点][径向方向点][坡印廷矢量(r方向传播方向)]-------------------------------------
	pt14.x=pt1.x+dis*sin(d11_r)*cos(fi_r*PI/180.0);//
	pt14.y=pt1.y+dis*sin(d11_r)*sin(fi_r*PI/180.0);//
	pt14.z=pt1.z+dis*cos(d11_r);//
	func_P(pt14.x,pt14.y,pt14.z,&pt14a.x,&pt14a.y);//
}//完成点位子函数
void draw_ol()//绘制轮廓线
{
	dline(pt1a,pt5a,c2);//
	dline(pt1a,pt6a,c2);//
	dline(pt1a,pt7a,c2);//
	dline(pt4a,pt10a,c2);//
	dline(pt6a,pt9a,c2);//
	dline(pt7a,pt8a,c2);//
	dline(pt3a,pt10a,c2);//
	dline(pt8a,pt5a,c2);//
	dline(pt5a,pt9a,c2);//
	dline(pt11a,pt1a,c2);//
	dline(pt11a,pt2a,c2);//
	dline(pt10a,pt1a,c2);//
    //电磁场矢量--------------------------------------
	dline(pt12a,pt1a,cc1);//磁场矢量(Φ方向)
	dline(pt13a,pt1a,cc2);//电场矢量(θ方向)
	dline(pt14a,pt1a,cc3);//坡印廷矢量(r方向传播方向)
}//结束子函数
//*/
//--------------------------------------------------------------------------------------------------

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值