mathematics for 3d game and computer graphics 책의 1장 연습문제 4번 답으로 작성한 vector class.
#ifndef __VECTOR_H__
#define __VECTOR_H__
namespace toki
{
class cVector
{
public:
cVector() {}
~cVector() {}
cVector(float aX, float aY, float aZ)
{
x_ = aX;
y_ = aY;
z_ = aZ;
}
cVector(const cVector& aVec)
{
*this = aVec;
}
cVector& operator = (const cVector& aVec)
{
if(this != &aVec)
{
x_ = aVec.x_;
y_ = aVec.y_;
z_ = aVec.z_;
}
return *this;
}
cVector& operator *= (float aScalar)
{
x_ *= aScalar;
y_ *= aScalar;
z_ *= aScalar;
return *this;
}
cVector& operator /= (float aScalar)
{
x_ /= aScalar;
y_ /= aScalar;
z_ /= aScalar;
return *this;
}
float dot(const cVector& aVec) const
{
return(x_*aVec.x_+y_*aVec.y_+z_*aVec.z_);
}
cVector& operator *= (const cVector& aVec)
{
x_ = y_*aVec.z_ - z_*aVec.y_;
y_ = z_*aVec.x_ - x_*aVec.z_;
z_ = x_*aVec.y_ - y_*aVec.x_;
return *this;
}
float magnitude()
{
return sqrt(dot(*this));
}
private:
float x_;
float y_;
float z_;
};
inline const cVector& operator * (const cVector& aVec, float aScalar)
{
return( cVector(aVec) *= aScalar );
}
inline const cVector& operator * (float aScalar, const cVector& aVec)
{
return( cVector(aVec) *= aScalar );
}
inline const cVector& operator / (const cVector& aVec, float aScalar)
{
return( cVector(aVec) /= aScalar );
}
inline const cVector& operator / (float aScalar, const cVector& aVec)
{
return( cVector(aVec) /= aScalar );
}
// dot product
inline float operator % (const cVector& aLhs, const cVector& aRhs)
{
return(aLhs.dot(aRhs));
}
inline const cVector& operator * (const cVector& aLhs, const cVector& aRhs)
{
return(cVector(aLhs) *= aRhs);
}
}
#endif//__VECTOR_H__
2004년 1월 6일에 네이버 블로그에 포스팅했던 글을 옮겨왔다.
답글삭제