/*********************************************************************************** * 要は代入の後に、Normalizeしてるだけ、でも、使わないので破棄予定。 ***********************************************************************************/ #if !defined ATS_VECTOR_H #define ATS_VECTOR_H #include "ats_point.h" namespace ats { template class Vector : public Point { private: public: inline explicit Vector(const T=0, const T=0, const T=0); inline explicit Vector(const Vector& a); inline explicit Vector(const Point& a); virtual ~Vector(); inline virtual void SetXYZ(const T x, const T y, const T z); inline virtual Vector& operator= (const Vector&); inline virtual Vector& operator+=(const Vector&); inline virtual Vector& operator-=(const Vector&); inline virtual Vector& operator*=(const Vector&); inline virtual Vector& operator/=(const Vector&); inline virtual Vector operator+(const Vector&) const; inline virtual Vector operator-(const Vector&) const; inline virtual Vector operator*(const Vector&) const; inline virtual Vector operator/(const Vector&) const; }; // エイリアス --------------------------------------------------------------------------- typedef Vector Vector3D; // implement --------------------------------------------------------------------------- // コンストラクタ・デストラクタ -------------------------------------------------------- template Vector::Vector(const T x, const T y, const T z) : Point(x, y, z) { Normalize(); } template Vector::Vector(const Vector& a) : Point(a) { Normalize(); } template Vector::Vector(const Point& a) : Point(a) { Normalize(); } template Vector::~Vector() { } // アクセッサ ------------------------------------------------------------------- template void Vector::SetXYZ(const T x, const T y, const T z) { m_x = x; m_y = y; m_z = z; Normalize(); } // 代入演算子 ------------------------------------------------------------------- template Vector& Vector::operator= (const Vector& a) { Point::operator=(a); Normalize(); return *this; } template Vector& Vector::operator+=(const Vector& a) { Point::operator+=(a); Normalize(); return *this; } template Vector& Vector::operator-=(const Vector& a) { Point::operator-=(a); Normalize(); return *this; } template Vector& Vector::operator*=(const Vector& a) { Point::operator*=(a); Normalize(); return *this; } template Vector& Vector::operator/=(const Vector& a) { Point::operator/=(a); Normalize(); return *this; } // 四則演算子 -------------------------------------------------------------------------------- // コピーコンストラクタを呼び出した時点で、Normalize()は呼ばれている。 template Vector Vector::operator+(const Vector& a) const { return Vector(Point::operator+(a)); } template Vector Vector::operator-(const Vector& a) const { return Vector(Point::operator-(a)); } template Vector Vector::operator*(const Vector& a) const { return Vector(Point::operator*(a)); } template Vector Vector::operator/(const Vector& a) const { return Vector(Point::operator/(a)); } } #endif // ATS_VECTOR_H