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

📄 vector.cpp

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

double PI=4*atan(1.0);
//////////////////////////////////////////////////////////////////////
//                                  
//                           坐标转化和矢量运算
//
//////////////////////////////////////////////////////////////////////
/*doublexyzVector RTPtoXYZ(doubleVector r);						//将球坐标转化为直角坐标
doublexyzVector XYZadd(doublexyzVector x,doublexyzVector y);	//两矢量相加
doublexyzVector XYZsub(doubleVector  rise,doubleVector end);	//两矢量相减
doublexyzVector XYZmult(double c,doublexyzVector);				//矢量乘常数
double dotmult(doubleVector X,doubleVector Y);					//矢量点乘
double XYZdotmult(doublexyzVector x,doublexyzVector y);			//直角坐标系矢量点乘
double MO(doublexyzVector x);									//矢量的模
double area(doubleVector A,doubleVector B,doubleVector C);      //三角形的面积
void printdoubleVector(doubleVector r);                         //显示点的球坐标系的参量
void printdoublexyzVector(doublexyzVector r);                   //显示点的直角坐标系的参量*/

//将球坐标转化为直角坐标
doubleVector Vectorset(double r,double thinc,double phinc)
{
	doubleVector Vectorset;
	
	Vectorset.R=r;
	Vectorset.thinc=thinc;
	Vectorset.phinc=phinc;

	return Vectorset;
}

doublexyzVector RTPtoXYZ(doubleVector r)
{
	doublexyzVector RTPtoXYZ;
	double sinth;

	sinth = sin(r.thinc);

	RTPtoXYZ.x = r.R*sinth*cos(r.phinc);
	RTPtoXYZ.y = r.R*sinth*sin(r.phinc);
	RTPtoXYZ.z = r.R*cos(r.thinc);
	
	return RTPtoXYZ;
}

doubleVector XYZtoRTP(doublexyzVector p)
{
	doubleVector Z;
	double x,y,z,r,PHINC,temp;

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

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

	Z.thinc=acos(z/r);
	
	temp=asin(x/sqrt(x*x+y*y));
	if(y>=0)
	{
		if(x>0)
			PHINC=temp;
		else
			PHINC=PI+temp;
	}
	else
	{
		if(x>0)
			PHINC=PI+temp;
		else
			PHINC=2*PI+temp;
	}

	Z.phinc=PHINC;

	return Z;
}
//两矢量相加
doublexyzVector XYZadd(doublexyzVector x,doublexyzVector y)
{
	doublexyzVector XYZadd;
		
	XYZadd.x = y.x + x.x;
	XYZadd.y = y.y + x.y;
	XYZadd.z = y.z + x.z;
	
	return XYZadd;
}

//两矢量相减
doublexyzVector XYZsub(doublexyzVector x,doublexyzVector y)
{
	doublexyzVector XYZsub;
		
	XYZsub.x = y.x - x.x;
	XYZsub.y = y.y - x.y;
	XYZsub.z = y.z - x.z;
//	cout<<"x "<<XYZsub.x<<" y "<<XYZsub.y<<" z "<<XYZsub.z<<endl;
	return XYZsub;
}	
//两矢量相减
doublexyzVector RTPsub(doubleVector rise,doubleVector end)
{
	doublexyzVector XYZsub;
	doublexyzVector x;
	doublexyzVector y;
	
	x=RTPtoXYZ(rise);
	y=RTPtoXYZ(end);
	
	XYZsub.x = y.x - x.x;
	XYZsub.y = y.y - x.y;
	XYZsub.z = y.z - x.z;
//	cout<<"x "<<XYZsub.x<<" y "<<XYZsub.y<<" z "<<XYZsub.z<<endl;
	return XYZsub;
}	
//矢量乘常数
doublexyzVector XYZmult(double c,doublexyzVector X)
{
	doublexyzVector XYZmult;
	
	XYZmult=X;
	XYZmult.x *=c;
	XYZmult.y *=c;
	XYZmult.z *=c;
	
	return XYZmult;
}
//矢量杈乘
doublexyzVector XYZVMult(doublexyzVector X,doublexyzVector Y)
{
	doublexyzVector XYZVMult;
	
	XYZVMult.x =X.y*Y.z -X.z*Y.y;
	XYZVMult.y =X.z*Y.x -X.x*Y.z;
	XYZVMult.z =X.x*Y.y -X.y*Y.x;
	
	return XYZVMult;
}
//求直角坐标系中某矢量的单位矢量
doublexyzVector Enxyz(doublexyzVector X)
{
	doublexyzVector Enxyz;
	double mo;

	Enxyz=X;
	mo=sqrt(pow(Enxyz.x,2) + pow(Enxyz.y,2) + pow(Enxyz.z,2));
	Enxyz.x /=mo;
	Enxyz.y /=mo;
	Enxyz.z /=mo;
	
	return Enxyz;
}
//求球坐标系中某矢量的单位矢量
doubleVector En(doubleVector X)
{
	doubleVector En;
	
	En.R =1;
	
	return En;
}
//球坐标系矢量点乘
double dotmult(doubleVector X,doubleVector Y)
{
	double dotmult;
	doublexyzVector x;
	doublexyzVector y;
	
	x=RTPtoXYZ(X);
	y=RTPtoXYZ(Y);
	
	dotmult= x.x*y.x + x.y*y.y + x.z*y.z;
	
	return dotmult;
}

//直角坐标系矢量点乘
double XYZdotmult(doublexyzVector x,doublexyzVector y)
{
	double XYZdotmult;
		
	XYZdotmult= x.x*y.x + x.y*y.y + x.z*y.z;
	
	return XYZdotmult;
}

//矢量的模
double MO(doublexyzVector x)
{	
	double MO;

	MO=sqrt(pow(x.x,2) + pow(x.y,2) + pow(x.z,2));
	
	return MO;
}

//三角形的面积
double area(doubleVector A,doubleVector B,doubleVector C)
{
	double a,b,c;
	double p,s;
	
	a=MO(RTPsub(B,C));
	b=MO(RTPsub(C,A));
	c=MO(RTPsub(A,B));
	//cout<<"a "<<a<<" b "<<b<<" c "<<c<<endl;
	p=0.5*(a+b+c);
	s=sqrt((p-a)*(p-b)*(p-c)*p);
	
	return s;
}      

//显示点的球坐标系的参量
void printdoubleVector(doubleVector r)
{
	cout<<"R = "<<r.R<<"  thinc = "<<180*r.thinc/PI<<"  phinc = "<<180*r.phinc/PI<<endl;
}

//显示点的直角坐标系的参量
void printdoublexyzVector(doublexyzVector r)
{
	cout<<"X = "<<r.x<<"  Y = "<<r.y<<"  Z = "<<r.z<<"  模  "<<MO(r)<<endl;
}                 

⌨️ 快捷键说明

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