#ifndef GEOMETRY_H #define GEOMETRY_H #include /****************************************************/ /* */ /* This is a class for 2D vectors with standard */ /* vector operations. */ /* */ /****************************************************/ using namespace std; class Tuple { public: // constructors Tuple() {data[0]=data[1];} // default construcotr Tuple(const double x, const double y) // constructor {data[0]=x, data[1]=y;} Tuple(const Tuple& toCopy); // copy constructor // destructor virtual ~Tuple() {}; // operators Tuple& operator = (const Tuple& toCopy); // assignment const bool operator == (const Tuple& toCompare) const; // equality const bool operator != (const Tuple& toCompare) const; // inequality const Tuple operator + (const Tuple& toAdd) const; // addition Tuple& operator += (const Tuple& toAdd); // unary addition const Tuple operator - () const; // negation const Tuple operator - (const Tuple& toSub) const; // subtraction Tuple& operator -= (const Tuple& toSub); // unary subtraction Tuple& operator *= (double scaleFactor); // scalar unary multiplication Tuple& operator /= (double scaleFactor); // sclar division // accessors double& operator[] (const int index); // index const double& operator[] (const int index) const; // read only indexing // vector operations const double dot(const Tuple& toDot) const; // dot product Tuple& normalize(void); // normalize Tuple getPerpendicular(void); const double length(void) const; // compute length private: double data[2]; ; }; // related functions const Tuple operator *(const Tuple& toMultiply, const double& scaleFactor); const Tuple operator *(const double& scaleFactor, const Tuple& toMultiply); const Tuple operator /(const Tuple& toDivide, const double& scaleFactor); ostream &operator<<(ostream &out_file, const Tuple& theTuple); #endif // GEOMETRY_H