C++ Exercises(一)

一个3D向量类

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> // Vertex3D.h:interfacefortheVertex3Dclass.
//
/ /
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();

friendVertex3DcrossProduct(
const Vertex3D & a, const Vertex3D & b);
friend
double Distance( const Vertex3D & a, const Vertex3D & b);
};


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> // Vertex3D.cpp:implementationoftheVertex3Dclass.
//
/ /

#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;
}

Vertex3DVertex3D::
operator - () const
{
// 负向量
return Vertex3D( - x, - y, - z);
}

Vertex3DVertex3D::
operator - ( const Vertex3D & vt) const
{
// 向量减法
return Vertex3D(x - vt.x,y - vt.y,z - vt.z);
}

Vertex3DVertex3D::
operator + ( const Vertex3D & vt) const
{
// 向量加法
return Vertex3D(x + vt.x,y + vt.y,z + vt.z);
}

Vertex3DVertex3D::
operator * ( double fac) const
{
// 与标量乘法
return Vertex3D(x * fac,y * fac,z * fac);
}

Vertex3DVertex3D::
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()
{

}

Vertex3DcrossProduct(
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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值