C++ Exercises(一)

一个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->= 0.0f;
    
this->= 0.0f;
    
this->= 0.0f;
}

Vertex3D::Vertex3D(
double tx,double ty,double tz)
{
    
this->= tx;
    
this->= ty;
    
this->= tz;
}
Vertex3D::Vertex3D(
const Vertex3D &vt)
{
    
this->= vt.x;
    
this->= vt.y;
    
this->= vt.z;
}

Vertex3D
& Vertex3D::operator = (const Vertex3D& vt)
{
    
this->= vt.x;
    
this->= vt.y;
    
this->= 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->+= vt.x;
    
this->+= vt.y;
    
this->+= vt.z;
    
return *this;
}

Vertex3D
& Vertex3D::operator -= (const Vertex3D &vt)
{
    
this->-= vt.x;
    
this->-= vt.y;
    
this->-= vt.z;
    
return *this;
}

Vertex3D
& Vertex3D::operator *= (double fac)
{
    
this->*= fac;
    
this->*= fac;
    
this->*= fac;
    
return *this;
}

Vertex3D
& Vertex3D::operator /= (double fac)
{
    
this->/= fac;
    
this->/= fac;
    
this->/= fac;
    
return *this;
}

void Vertex3D::reset()
{
//置为零向量 
    this->= 0.0f;
    
this->= 0.0f;
    
this->= 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->*= tmp;
        
this->*= tmp;
        
this->*= 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);
}

posted on 2007-04-29 16:04  Phinecos(洞庭散人)  阅读(998)  评论(1编辑  收藏  举报

导航