Files
Work/engine/VECTOR.HPP
2024-08-07 09:16:27 -04:00

183 lines
3.3 KiB
C++

#ifndef _ENGINE_VECTOR_HPP_
#define _ENGINE_VECTOR_HPP_
#ifndef _ENGINE_POINT3D_HPP_
#include <engine/point3d.hpp>
#endif
class Vector
{
public:
Vector(void);
Vector(const Vector &vector);
Vector(int xScalar,int yScalar,int zScalar);
Vector(const Point3D &firstPoint,const Point3D &secondPoint);
virtual ~Vector();
Vector &operator=(const Vector &vector);
BOOL operator==(const Vector &vector);
Vector operator+(const Vector &vector);
Vector operator*(const Vector &vector);
int xScalar(void)const;
void xScalar(int xScalar);
int yScalar(void)const;
void yScalar(int yScalar);
int zScalar(void)const;
void zScalar(int zScalar);
void vector(const Point3D &firstPoint,const Point3D &secondPoint);
int length(void)const;
int magnitude(void)const;
void normal(Vector &vector)const;
void normal(void);
int dot(const Vector &vector)const;
private:
int mxScalar;
int myScalar;
int mzScalar;
};
inline
Vector::Vector(void)
: mxScalar(0), myScalar(0), mzScalar(0)
{
}
inline
Vector::Vector(int xScalar,int yScalar,int zScalar)
: mxScalar(xScalar), myScalar(yScalar), mzScalar(zScalar)
{
}
inline
Vector::Vector(const Point3D &firstPoint,const Point3D &secondPoint)
{
vector(firstPoint,secondPoint);
}
inline
Vector::Vector(const Vector &vector)
{
*this=vector;
}
inline
Vector::~Vector()
{
}
inline
Vector &Vector::operator=(const Vector &vector)
{
xScalar(vector.xScalar());
yScalar(vector.yScalar());
zScalar(vector.zScalar());
return *this;
}
inline
BOOL Vector::operator==(const Vector &vector)
{
return (xScalar()==vector.xScalar()&&
yScalar()==vector.yScalar()&&
zScalar()==vector.zScalar());
}
inline
Vector Vector::operator+(const Vector &vector)
{
return Vector(xScalar()+vector.xScalar(),yScalar()+vector.yScalar(),zScalar()+vector.zScalar());
}
inline
Vector Vector::operator*(const Vector &vector)
{
return Vector((yScalar()*vector.zScalar()-zScalar()*vector.yScalar()),zScalar()*vector.xScalar()-xScalar()*vector.zScalar(),xScalar()*vector.yScalar()-yScalar()*vector.xScalar());
}
inline
int Vector::xScalar(void)const
{
return mxScalar;
}
inline
void Vector::xScalar(int xScalar)
{
mxScalar=xScalar;
}
inline
int Vector::yScalar(void)const
{
return myScalar;
}
inline
void Vector::yScalar(int yScalar)
{
myScalar=yScalar;
}
inline
int Vector::zScalar(void)const
{
return mzScalar;
}
inline
void Vector::zScalar(int zScalar)
{
mzScalar=zScalar;
}
inline
void Vector::vector(const Point3D &firstPoint,const Point3D &secondPoint)
{
xScalar(secondPoint.x()-firstPoint.x());
yScalar(secondPoint.y()-firstPoint.y());
zScalar(secondPoint.z()-firstPoint.z());
}
inline
int Vector::length(void)const
{
int vLength(.5*(xScalar()*xScalar())+(yScalar()*yScalar())+(zScalar()*zScalar()));
if(vLength<0)vLength=-vLength;
return vLength;
}
inline
int Vector::magnitude(void)const
{
return length();
}
inline
void Vector::normal(Vector &vector)const
{
int vLength(length());
if(!vLength)
{
vector.xScalar(0);
vector.yScalar(0);
vector.zScalar(0);
}
else
{
vector.xScalar(xScalar()/vLength);
vector.yScalar(yScalar()/vLength);
vector.zScalar(zScalar()/vLength);
}
}
inline
void Vector::normal(void)
{
normal(*this);
}
inline
int Vector::dot(const Vector &vector)const
{
return (xScalar()*vector.xScalar())+(yScalar()*vector.yScalar())+(zScalar()*vector.zScalar());
}
#endif