#ifndef VECTOR_H #define VECTOR_H VECTOR_H #include class Vector { public: Vector(); Vector(double x, double y, double z); double & operator[](int idx) { return m_array[idx]; } double operator[](int idx) const { return m_array[idx]; } Vector operator-() const; Vector & normalize(); double mag() const; double mag2() const; double dist_to(const Vector & other) const; Vector proj(const Vector & target) const; Vector reflect(const Vector & target) const; protected: double m_array[3]; }; std::ostream & operator<<(std::ostream & out, const Vector & v); double operator%(const Vector & v1, const Vector & v2); Vector operator*(const Vector & v1, const Vector & v2); Vector operator+(const Vector & v1, const Vector & v2); Vector operator-(const Vector & v1, const Vector & v2); Vector operator*(const Vector & v1, double scale); Vector operator/(const Vector & v1, double scale); #endif