向量类

来源:互联网 发布:日本淘宝网 编辑:程序博客网 时间:2024/05/05 02:51


#include <stdio.h>#include <vector>#include <string.h>#include <algorithm>#include <iostream>#include <string>#include <limits.h>#include <stack>#include <queue>#include <set>#include <map>#include <bitset>using namespace std;class Vecter3{public:float x,y,z;//默认构造函数Vecter3(){}//复制构造函数Vecter3(const Vecter3 &a):x(a.x),y(a.y),z(a.z){}//带参数的构造函数Vecter3(float nx,float ny,float nz):x(nx),y(ny),z(nz){}//重载赋值运算符Vecter3 &operator =(const Vecter3 &a){x = a.x; y = a.y; z = a.z;return *this;}//重载‘==’运算符bool operator ==(const Vecter3 &a)const{return x==a.x&&y==a.y&&z==a.z;}bool operator !=(const Vecter3 &a)const{return x!=a.x||y!=a.y||z!=a.z;}//向量运算//置为0向量void zero(){x=y=z=0.0f;}//重载一元运算符‘-’Vecter3 operator -()const{return Vecter3(-x,-y,-z);}//重载二元‘+’,‘-'运算符Vecter3 operator +(const Vecter3 &a)const{return Vecter3(x+a.x,y+a.y,z+a.z);}Vecter3 operator -(const Vecter3 &a)const{return Vecter3(x-a.x,y-a.y,z-a.z);}//与标量的乘,除法Vecter3 operator *(float a)const{return Vecter3(x*a,y*a,z*a);}Vecter3 operator /(float a)const{float oneOverA = 1.0f/a;//这里不检查a是否为0return Vecter3(x*oneOverA,y*oneOverA,z*oneOverA);}//重载自反运算符Vecter3 &operator +=(const Vecter3 &a){x+=a.x;y+=a.y;z+=a.z;return *this;}Vecter3 &operator -=(const Vecter3 &a){x-=a.x;y-=a.y;z-=a.z;return *this;}Vecter3 &operator *=(float a){x*=a;y*=a;z*=a;return *this;}Vecter3 &operator /=(float a){float oneOverA = 1.0f/a;x*=oneOverA;y*=oneOverA;z*=oneOverA;return *this;}//向量标准化void normalize(){float magSq = x*x + y*y + z*z;if(magSq>0.0f){//检查除零float oneOverMag = 1.0f / sqrt(magSq);x *= oneOverMag;y *= oneOverMag;z *= oneOverMag;}}//向量点乘,重载标准乘法运算符float operator *(const Vecter3 &a)const{return x*a.x+y*a.y+z*a.z;}};//非成员函数//求向量的模inline float vectorMag(const Vecter3 &a){return sqrt(a.x*a.x+a.y*a.y+a.z*a.z);}//计算两向量的差乘inline Vecter3 crossProduct(const Vecter3 &a,const Vecter3 &b){return Vecter3(a.y*b.z-a.z*b.y,a.z*b.x-a.x*b.z,a.x*b.y-a.y*b.x);}//实现标量左乘inline Vecter3 operator*(float k,const Vecter3 &a){return Vecter3(k*a.x,k*a.y,k*a.z);}//计算两点间的距离inline float distance(const Vecter3 &a,const Vecter3 &b){float dx = a.x - b.x;float dy = a.y - b.y;float dz = a.z - b.z;return sqrt(dx*dx+dy*dy+dz*dz);}//全局变量//提供一个全局零向量extern const Vecter3 kZeroVecter;





0 0
原创粉丝点击