vector.h

来自「该代码可以用来计算二维TM波的FDTD程序。 外加理想匹配层(PML)。 有」· C头文件 代码 · 共 71 行

H
71
字号

typedef  double db;
class vector{
private:
public:
	db xx,yy,zz;
	vector(db x=0.0,db y=0.0,db z=0.0);
	double operator!();			//calculate the module of a vector
	vector operator&();			//unit vector
	vector operator~();			//calculate the directive cosine of a vector

	friend ostream& operator<<(ostream& os,vector& A);
	friend istream& operator>>(istream& is,vector& A);
	friend bool operator==(vector& A,vector& B);
	friend double operator*(vector& A,vector& B);		//dot multiplication
	friend vector operator*(db k,vector& B);
	friend vector operator*(vector& B,db k);
	friend vector operator/(vector& A,vector& B);		//cross multiplication
	friend vector operator+(vector& A,vector& B);		//additive operator
	friend vector operator-(vector& A,vector& B);
	friend double angle(vector& A,vector& B);
	//friend vector operator(vector A,db k);
};

vector::vector(db x,db y,db z){
	xx=x;yy=y;zz=z;
}
double vector::operator!(){
	return sqrt(xx*xx+yy*yy+zz*zz);
}
vector vector::operator~(){
	double temp=sqrt(xx*xx+yy*yy+zz*zz);
	return vector(xx/temp,yy/temp,zz/temp);
}
vector vector::operator&(){
	double temp=sqrt(xx*xx+yy*yy+zz*zz);
	return vector(xx/temp,yy/temp,zz/temp);
}
bool operator==(vector& A,vector& B){
	return ((A.xx==B.xx)&&(A.yy==B.yy)&&(A.zz==B.zz))?true:false;
}
ostream& operator<<(ostream& os,vector& A){
	os<<A.xx<<"\t"<<A.yy<<"\t"<<A.zz<<endl;
	return os;
}
istream& operator>>(istream& is,vector& A){
	is>>A.xx>>A.yy>>A.zz;
	return is;
}
double operator*(vector& A,vector& B){
	return A.xx*B.xx+A.yy*B.yy+A.zz*B.zz;
}
vector operator/(vector& A,vector& B){
	return vector(A.yy*B.zz-A.zz*B.yy,A.zz*B.xx-A.xx*B.zz,A.xx*B.yy-A.yy*B.xx);
}
vector operator*(db k,vector& B){
	return vector(k*B.xx,k*B.yy,k*B.zz);
}
vector operator*(vector& B,db k){
	return vector(k*B.xx,k*B.yy,k*B.zz);
}

vector operator+(vector& A,vector& B){
	return vector(A.xx+B.xx,A.yy+B.yy,A.zz+B.zz);
}
vector operator-(vector& A,vector& B){
	return vector(A.xx-B.xx,A.yy-B.yy,A.zz-B.zz);
}
double angle(vector& A,vector& B){
	return acos((A*B)/(!A*!B));
}

⌨️ 快捷键说明

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