/** * Class that models a vector in 3D * Author: Diego Cáceres * Modifications by: Alfredo Morales Pinzón * Date modifications: Octobre 7, 2014 */ #ifndef VEC3_H #define VEC3_H #include #include #include #include // std::numeric_limits //------------------------------------------------------------------------------ /** * @brief The Vec3 class that represents a vector in 3D */ class MathLib_EXPORT Vec3 { private: float x, y, z; //!< Coordinates public: //---------------------------------------------------------------------------- /** * @brief Vec3 */ Vec3(); //---------------------------------------------------------------------------- /** * @brief Vec3 * @param x * @param y * @param z */ Vec3(const float& x, const float& y, const float& z); //---------------------------------------------------------------------------- //Getters //---------------------------------------------------------------------------- /** * @brief GetVec3 * @return */ const float* GetVec3() const; //---------------------------------------------------------------------------- /** * @brief GetVec3 * @return */ float* GetVec3(); //---------------------------------------------------------------------------- /** * @brief Norm * @return */ float Norm() const; /** * Method that normalizes the vector. v = v/|v| */ void Normalize(); /** * Method that sets all the values */ void set(const float& x, const float& y, const float& z); /** * @brief Dot * @param b * @return */ float Dot(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief Orthogonal * @param b * @return */ Vec3 Orthogonal(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief Cross * @param b * @return */ Vec3 Cross(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief EculideanDistance between two points * @param b * @return */ float EculideanDistance(const Vec3& b) const; //---------------------------------------------------------------------------- //Operator Overloads //---------------------------------------------------------------------------- /** * @brief The copy operator * @param vec * @return */ Vec3& operator=(const Vec3& vec); //---------------------------------------------------------------------------- /** * @brief operator [] * @param i * @return */ float& operator[](unsigned int i); //---------------------------------------------------------------------------- /** * @brief operator [] * @param i * @return */ const float& operator[](unsigned int i) const; //---------------------------------------------------------------------------- /** * @brief operator + * @return */ Vec3 operator+() const; //---------------------------------------------------------------------------- /** * @brief operator - * @return */ Vec3 operator-() const; //---------------------------------------------------------------------------- /** * @brief operator += * @param b * @return */ Vec3& operator+=(const Vec3& b); //---------------------------------------------------------------------------- /** * @brief operator -= * @param b * @return */ Vec3& operator-=(const Vec3& b); //---------------------------------------------------------------------------- /** * @brief operator *= * @param k * @return */ Vec3& operator*=(const float& k); //---------------------------------------------------------------------------- /** * @brief operator /= * @param k * @return */ Vec3& operator/=(const float& k); //---------------------------------------------------------------------------- /** * @brief operator + * @param b * @return */ Vec3 operator+(const Vec3& b); //---------------------------------------------------------------------------- /** * @brief operator - * @param b * @return */ Vec3 operator-(const Vec3& b); //---------------------------------------------------------------------------- /** * @brief operator * * @param k * @return */ Vec3 operator*(const float& k); //---------------------------------------------------------------------------- /** * @brief operator / * @param k * @return */ Vec3 operator/(const float& k); //---------------------------------------------------------------------------- /** * @brief operator == * @param b * @return */ bool operator==(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief operator != * @param b * @return */ bool operator!=(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief operator < * @param b * @return */ bool operator<(const Vec3& b) const; //---------------------------------------------------------------------------- /** * @brief operator > * @param b * @return */ bool operator>(const Vec3& b); //---------------------------------------------------------------------------- friend std::ostream& operator<<(std::ostream& os, const Vec3& coord); //---------------------------------------------------------------------------- }; //------------------------------------------------------------------------------ #endif // VEC3_H