2010년 1월 5일 화요일

vector class

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__

댓글 1개:

  1. 2004년 1월 6일에 네이버 블로그에 포스팅했던 글을 옮겨왔다.

    답글삭제