|
#pragma once
#include <math.h>
namespace oag
{
class OAGVector3d
{
public:
OAGVector3d(void):m_X(0), m_Y(0), m_Z(0){};
OAGVector3d(const double& dX, const double& dY, const double& dZ = 0) : m_X(dX), m_Y(dY), m_Z(dZ) {};
~OAGVector3d(void){};
//Attributes
public:
double m_X, m_Y, m_Z;
oag::OAGVector3d operator = (const oag::OAGVector3d& vec );
oag::OAGVector3d operator + (const oag::OAGVector3d& vec );
oag::OAGVector3d operator += (const oag::OAGVector3d& vec );
oag::OAGVector3d operator - (const oag::OAGVector3d& vec );
oag::OAGVector3d operator - ();
oag::OAGVector3d operator -= (const oag::OAGVector3d& vec );
oag::OAGVector3d operator * (const oag::OAGVector3d& vec );
oag::OAGVector3d operator * (const float& scalar );
oag::OAGVector3d operator *= (const float& scalar );
oag::OAGVector3d operator / (const oag::OAGVector3d& vec );
oag::OAGVector3d operator / (const double& num);
oag::OAGVector3d operator /= (const double& scalar);
double Length();
void Scalar( float scale );
void SetVertex(int x, int y, int z);
void SetVertex(double x, double y, double z);
void SetVertex(oag::OAGVector3d vec);
oag::OAGVector3d UnitVector();
oag::OAGVector3d CrossProduct(oag::OAGVector3d& vec);
void Normalize();
};
inline oag::OAGVector3d oag::OAGVector3d::operator = (const oag::OAGVector3d& vec )
{
m_X = vec.m_X; m_Y = vec.m_Y; m_Z = vec.m_Z;
return *this;
}
inline oag::OAGVector3d oag::OAGVector3d::operator + (const oag::OAGVector3d& vec )
{
oag::OAGVector3d vector;
vector.m_X = (m_X + vec.m_X); vector.m_Y = (m_Y + vec.m_Y); vector.m_Z = (m_Z + vec.m_Z);
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator += (const oag::OAGVector3d& vec )
{
m_X += vec.m_X; m_Y += vec.m_Y; m_Z += vec.m_Z;
return *this;
}
inline oag::OAGVector3d oag::OAGVector3d::operator - (const oag::OAGVector3d& vec )
{
oag::OAGVector3d vector;
vector.m_X = (m_X - vec.m_X); vector.m_Y = (m_X = vec.m_Y); vector.m_Z = (m_Z - vec.m_Z);
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator -()
{
oag::OAGVector3d vector(- m_X, -m_Y, -m_Z);
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator -= (const oag::OAGVector3d& vec )
{
m_X -= vec.m_X; m_Y -= vec.m_Y; m_Z -= vec.m_Z;
return *this;
}
inline oag::OAGVector3d oag::OAGVector3d::operator * ( const oag::OAGVector3d& vec )
{
oag::OAGVector3d vector;
m_X = (m_X * vec.m_X); m_Y = (m_Y * vec.m_Y); m_Z = (m_Z * vec.m_Z);
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator *(const float& scalar)
{
oag::OAGVector3d vector;
vector.m_X = ( m_X * scalar ); vector.m_Y = ( m_Y * scalar ); vector.m_Z = ( m_Z * scalar );
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator *=(const float& scalar)
{
m_X *= scalar; m_Y *= scalar; m_Z *= scalar;
return *this;
}
inline oag::OAGVector3d oag::OAGVector3d::operator / ( const oag::OAGVector3d& vec )
{
oag::OAGVector3d vector;
vector.m_X = ( m_X / vec.m_X ); vector.m_Y = ( m_Y / vec.m_Y ); vector.m_Z = ( m_Z / vec.m_Z );
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator/(const double& num)
{
oag::OAGVector3d vector;
vector.m_X = (m_X / num); vector.m_Y = (m_Y / num); vector.m_Z = (m_Z / num);
return vector;
}
inline oag::OAGVector3d oag::OAGVector3d::operator /=(const double& scalar)
{
const double recip = 1/scalar;
m_X *= recip; m_Y *= recip; m_Z *= recip;
return *this;
}
inline double oag::OAGVector3d::Length()
{
return sqrt( ( m_X * m_X ) + ( m_Y * m_Y ) + ( m_Z * m_Z ) );
}
inline void oag::OAGVector3d::Scalar(float scale)
{
m_X *= scale; m_Y *= scale; m_Z *= scale;
}
inline void oag::OAGVector3d::SetVertex(int x, int y, int z)
{
m_X = x;
m_Y = y;
m_Z = z;
}
inline void oag::OAGVector3d::SetVertex(double x, double y, double z)
{
m_X = x;
m_Y = y;
m_Z = z;
}
inline void oag::OAGVector3d::SetVertex(oag::OAGVector3d vec)
{
m_X = vec.m_X;
m_Y = vec.m_Y;
m_Z = vec.m_Z;
}
inline oag::OAGVector3d oag::OAGVector3d::UnitVector()
{
oag::OAGVector3d vec;
vec = vec / Length();
return vec;
}
inline oag::OAGVector3d oag::OAGVector3d::CrossProduct(oag::OAGVector3d& vec)
{
oag::OAGVector3d v;
v.m_X = ( ( m_Y * vec.m_Z ) - ( m_Z * vec.m_Y ) );
v.m_Y = ( ( m_Z * vec.m_X ) - ( m_X * vec.m_Z ) );
v.m_Z = ( ( m_X * vec.m_Y ) - ( m_Y * vec.m_X ) );
return vec;
}
inline void oag::OAGVector3d::Normalize()
{
m_X /= Length();
m_Y /= Length();
m_Z /= Length();
}
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I live in Matão, a small city in Brazil. I studied as Programmer in a College for Software Development in Database.
After finishing the College I have been working with java, c# and Computer Graphics with searches for OpenGL.