271 lines
7.6 KiB
C++
Executable File
271 lines
7.6 KiB
C++
Executable File
/**
|
|
*
|
|
* @file vec2d.h
|
|
* @author Alexandre Sollier
|
|
* @date Janvier 2020
|
|
* @version 1.3
|
|
* @brief Représente un vecteur sur deux dimensions
|
|
*
|
|
**/
|
|
|
|
#ifndef VEC2D_H
|
|
#define VEC2D_H
|
|
|
|
#include <ostream>
|
|
|
|
#include "../tools/ieditable.h"
|
|
|
|
namespace nsGraphics
|
|
{
|
|
|
|
/**
|
|
* @class Vec2D
|
|
* @brief Classe représentant un vecteur deux-dimensionnel
|
|
*/
|
|
class Vec2D : public nsUtil::IEditable
|
|
{
|
|
|
|
public:
|
|
/**
|
|
* @brief Constructeur pour la classe Vec2D
|
|
* @param[in] x : Position X (abscisse) du vecteur
|
|
* @param[in] y : Position Y (ordonnée) du vecteur
|
|
* @fn Vec2D(const int& x = 0, const int& y = 0);
|
|
*/
|
|
Vec2D(const int& x = 0, const int& y = 0);
|
|
|
|
/**
|
|
* @brief Constructeur de recopie pour la classe Vec2D
|
|
* @param[in] pos : Vec2D a copier
|
|
* @fn Vec2D(const Vec2D& Position);
|
|
*/
|
|
Vec2D(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur unaire plus
|
|
* @fn Vec2D operator+() const;
|
|
*/
|
|
Vec2D operator+() const;
|
|
|
|
/**
|
|
* @brief Opérateur unaire moins
|
|
* @fn Vec2D operator-() const;
|
|
*/
|
|
Vec2D operator-() const;
|
|
|
|
/**
|
|
* @brief Opérateur d'addition
|
|
* @param[in] pos : Vecteur a additionner
|
|
* @fn Vec2D operator+(const Vec2D& Position) const;
|
|
*/
|
|
Vec2D operator+(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de soustraction
|
|
* @param[in] pos : Vecteur a soustraire
|
|
* @fn Vec2D operator-(const Vec2D& Position) const;
|
|
*/
|
|
Vec2D operator-(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de multiplication
|
|
* @param[in] pos : Vecteur a multiplier
|
|
* @fn Vec2D operator*(const Vec2D& Position) const;
|
|
*/
|
|
Vec2D operator*(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de multiplication
|
|
* @param[in] n : Nombre avec lequel multiplier le vecteur actuel
|
|
* @fn Vec2D operator*(const float& n) const;
|
|
*/
|
|
Vec2D operator*(const float& n) const;
|
|
|
|
/**
|
|
* @brief Opérateur de division
|
|
* @param[in] pos : Vecteur a diviser
|
|
* @fn Vec2D operator/(const Vec2D& Position) const;
|
|
*/
|
|
Vec2D operator/(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de division
|
|
* @param[in] n : Nombre avec lequel diviser le vecteur actuel
|
|
* @fn Vec2D operator/(const float& n) const;
|
|
*/
|
|
Vec2D operator/(const float& n) const;
|
|
|
|
/**
|
|
* @brief Opérateur modulo
|
|
* @param[in] pos : Vecteur avec lequel faire un modulo
|
|
* @fn Vec2D operator%(const Vec2D& Position) const;
|
|
*/
|
|
Vec2D operator%(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur d'égalité
|
|
* @param[in] pos : Vecteur avec lequel vérifier l'égalité
|
|
* @fn bool operator==(const Vec2D& Position) const;
|
|
*/
|
|
bool operator==(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur d'inégalité
|
|
* @param[in] pos : Vecteur avec lequel vérifier l'inégalité
|
|
* @fn bool operator!=(const Vec2D& Position) const;
|
|
*/
|
|
bool operator!=(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de stricte infériorité
|
|
* (Vérifie la stricte infériorité de la magnitude des deux vecteurs)
|
|
* @param[in] pos : Vecteur avec lequel vérifier la stricte infériorité
|
|
* @fn bool operator<(const Vec2D& Position) const;
|
|
*/
|
|
bool operator<(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de stricte supériorité
|
|
* (Vérifie la stricte supériorité de la magnitude des deux vecteurs)
|
|
* @param[in] pos : Vecteur avec lequel vérifier la stricte supériorité
|
|
* @fn bool operator>(const Vec2D& Position) const;
|
|
*/
|
|
bool operator>(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur d'infériorité
|
|
* (Vérifie l'infériorité de la magnitude des deux vecteurs)
|
|
* @param[in] pos : Vecteur avec lequel vérifier l'infériorité
|
|
* @fn bool operator<=(const Vec2D& Position) const;
|
|
*/
|
|
bool operator<=(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur de supériorité
|
|
* (Vérifie la supériorité de la magnitude des deux vecteurs)
|
|
* @param[in] pos : Vecteur avec lequel vérifier la supériorité
|
|
* @fn bool operator>=(const Vec2D& Position) const;
|
|
*/
|
|
bool operator>=(const Vec2D& pos) const;
|
|
|
|
/**
|
|
* @brief Opérateur d'assignement
|
|
* @param[in] pos : Vecteur source
|
|
* @fn Vec2D& operator=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur d'addition avec assignement
|
|
* @param[in] pos : Vecteur avec lequel additionner le vecteur actuel
|
|
* @fn Vec2D& operator+=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator+=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur de soustraction avec assignement
|
|
* @param[in] pos : Vecteur avec lequel soustraire le vecteur actuel
|
|
* @fn Vec2D& operator-=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator-=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur de multiplication avec assignement
|
|
* @param[in] pos : Vecteur avec lequel multiplier le vecteur actuel
|
|
* @fn Vec2D& operator*=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator*=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur de division avec assignement
|
|
* @param[in] pos : Vecteur avec lequel diviser le vecteur actuel
|
|
* @fn Vec2D& operator/=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator/=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Opérateur modulo avec assignement
|
|
* @param[in] pos : Vecteur avec lequel faire un modulo sur le vecteur actuel
|
|
* @fn Vec2D& operator%=(const Vec2D& Position);
|
|
*/
|
|
Vec2D& operator%=(const Vec2D& pos);
|
|
|
|
/**
|
|
* @brief Retourne le vecteur le plus petit entre les deux passés en argument
|
|
* @param[in] p1 : Premier vecteur
|
|
* @param[in] p2 : Second vecteur
|
|
* @fn static Vec2D min(const Vec2D& p1, const Vec2D& p2);
|
|
*/
|
|
static Vec2D min(const Vec2D& p1, const Vec2D& p2);
|
|
|
|
/**
|
|
* @brief Retourne vrai si le premier vecteur est le plus petit des deux
|
|
* @param[in] p1 : Premier vecteur
|
|
* @param[in] p2 : Second vecteur
|
|
* @fn static bool minf(const Vec2D& p1, const Vec2D& p2);
|
|
*/
|
|
static bool minf(const Vec2D& p1, const Vec2D& p2);
|
|
|
|
/**
|
|
* @brief Retourne vrai si le vecteur actuel est compris entre deux vecteurs formant un rectangle
|
|
* @param[in] firstCorner : Premier vecteur
|
|
* @param[in] secondCorner : Second vecteur
|
|
* @fn bool isColliding(Vec2D firstCorner, Vec2D secondCorner) const;
|
|
*/
|
|
bool isColliding(Vec2D firstCorner, Vec2D secondCorner) const;
|
|
|
|
/**
|
|
* @brief Calcule la magnitude de ce vecteur
|
|
* @return Magnitude du vecteur
|
|
* @fn double computeMagnitude() const;
|
|
*/
|
|
double computeMagnitude() const;
|
|
|
|
/**
|
|
* @brief Récupère la Position X (abscisse)
|
|
* @return Une référence constante vers m_x
|
|
* @fn int getX() const;
|
|
*/
|
|
int getX() const;
|
|
|
|
/**
|
|
* @brief Définit la nouvelle Position X (abscisse)
|
|
* @param[in] x : Nouvelle Position X
|
|
* @fn void setX(int x);
|
|
*/
|
|
void setX(int x);
|
|
|
|
/**
|
|
* @brief Récupère la Position Y (ordonnée)
|
|
* @return Une référence constante vers m_y
|
|
* @fn int getY() const;
|
|
*/
|
|
int getY() const;
|
|
|
|
/**
|
|
* @brief Définit la nouvelle Position Y (ordonnée)
|
|
* @param[in] y : Nouvelle Position Y
|
|
* @fn void setY(int y);
|
|
*/
|
|
void setY(int y);
|
|
|
|
protected:
|
|
virtual std::ostream& _Edit(std::ostream& os = std::cout) const override;
|
|
|
|
private:
|
|
/**
|
|
* @brief m_x : Position X (abscisse)
|
|
*/
|
|
int m_x;
|
|
|
|
/**
|
|
* @brief m_y : Position Y (ordonnée)
|
|
*/
|
|
int m_y;
|
|
|
|
}; // class Vec2D
|
|
|
|
} // namespace nsGraphics
|
|
|
|
#endif // VEC2D_H
|