一个3D向量类
// Vertex3D.h: interface for the Vertex3D class.
//
//////////////////////////////////////////////////////////////////////
class Vertex3D
{//3维向量类
private:
double x,y,z;
public:
Vertex3D();
Vertex3D(double tx,double ty,double tz);
Vertex3D(const Vertex3D& vt);//拷贝构造函数
Vertex3D& operator = (const Vertex3D &vt);//重载赋值运算符
bool operator == (const Vertex3D &vt)const;//重载"=="运算符
bool operator != (const Vertex3D &vt)const;//重载"!="运算符
Vertex3D operator -()const;//负向量
Vertex3D operator - (const Vertex3D &vt)const;//向量减法
Vertex3D operator + (const Vertex3D &vt)const;//向量加法
Vertex3D operator * (double fac)const;//与标量相乘
Vertex3D operator / (double fac)const;//与标量相除
Vertex3D& operator += (const Vertex3D &vt);
Vertex3D& operator -= (const Vertex3D &vt);
Vertex3D& operator *= (double fac);//与标量相乘
Vertex3D& operator /= (double fac);//与标量相除
double operator * (const Vertex3D &vt)const;//向量点乘
void reset();
void normalize();//向量单位化
double VertexLength()const;//向量模
virtual ~Vertex3D();
friend Vertex3D crossProduct(const Vertex3D &a,const Vertex3D &b);
friend double Distance(const Vertex3D &a,const Vertex3D &b);
};
// Vertex3D.cpp: implementation of the Vertex3D class.
//
//////////////////////////////////////////////////////////////////////
#include "Vertex3D.h"
#include <math.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Vertex3D::Vertex3D()
{
this->x = 0.0f;
this->y = 0.0f;
this->z = 0.0f;
}
Vertex3D::Vertex3D(double tx,double ty,double tz)
{
this->x = tx;
this->y = ty;
this->z = tz;
}
Vertex3D::Vertex3D(const Vertex3D &vt)
{
this->x = vt.x;
this->y = vt.y;
this->z = vt.z;
}
Vertex3D& Vertex3D::operator = (const Vertex3D& vt)
{
this->x = vt.x;
this->y = vt.y;
this->z = vt.z;
return *this;
}
bool Vertex3D::operator == (const Vertex3D& vt)const
{//判断向量是否相等
return this->x==vt.x&&this->y==vt.y&&this->z==vt.z;
}
bool Vertex3D::operator != (const Vertex3D& vt)const
{
return this->x!=vt.x&&this->y!=vt.y&&this->z!=vt.z;
}
Vertex3D Vertex3D::operator - ()const
{//负向量
return Vertex3D(-x,-y,-z);
}
Vertex3D Vertex3D::operator - (const Vertex3D& vt)const
{//向量减法
return Vertex3D(x-vt.x,y-vt.y,z-vt.z);
}
Vertex3D Vertex3D::operator + (const Vertex3D& vt)const
{//向量加法
return Vertex3D(x+vt.x,y+vt.y,z+vt.z);
}
Vertex3D Vertex3D::operator * (double fac)const
{//与标量乘法
return Vertex3D(x*fac,y*fac,z*fac);
}
Vertex3D Vertex3D::operator / (double fac)const
{//与标量相除
return Vertex3D(x/fac,y/fac,z/fac);
}
Vertex3D& Vertex3D::operator += (const Vertex3D &vt)
{
this->x += vt.x;
this->y += vt.y;
this->z += vt.z;
return *this;
}
Vertex3D& Vertex3D::operator -= (const Vertex3D &vt)
{
this->x -= vt.x;
this->y -= vt.y;
this->z -= vt.z;
return *this;
}
Vertex3D& Vertex3D::operator *= (double fac)
{
this->x *= fac;
this->y *= fac;
this->z *= fac;
return *this;
}
Vertex3D& Vertex3D::operator /= (double fac)
{
this->x /= fac;
this->y /= fac;
this->z /= fac;
return *this;
}
void Vertex3D::reset()
{//置为零向量
this->x = 0.0f;
this->y = 0.0f;
this->z = 0.0f;
}
double Vertex3D::VertexLength()const
{//向量长度
double tmp = x*x+y*y+z*z;
return sqrt(tmp);
}
void Vertex3D::normalize()
{//向量单位化
double len = this->VertexLength();//获取向量长度
if(len>0.0f)
{
double tmp = 1.0f/len;
this->x *= tmp;
this->y *= tmp;
this->z *= tmp;
}
}
double Vertex3D::operator * (const Vertex3D &vt)const
{//向量点乘
return x*vt.x+y*vt.y+z*vt.z;
}
Vertex3D::~Vertex3D()
{
}
Vertex3D crossProduct(const Vertex3D &a,const Vertex3D &b)
{//向量叉乘
return Vertex3D(a.y*b.z - a.z*b.y,a.z*b.x - a.x*b.z,a.x*b.y - a.y*b.x);
}
double Distance(const Vertex3D &a,const Vertex3D &b)
{//向量距离
double dx = a.x - b.x,dy = a.y - b.y,dz = a.z - b.z;
return sqrt(dx*dx+dy*dy+dz*dz);
}
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/04/29/732444.html,如需转载请自行联系原作者