#pragma once /** * \file Vect.h * \brief Contient la définition d'un espace affine et d'un espace vectoriel */ #include "Matrix.h" /** * \class Vect * \brief Représente une base d'un espace vectoriel de dimension finie */ class Vect { private: Matrix m_Data; public: /** * \brief Construit une base d'un espace vectoriel à partir des colonnes d'une matrice. * Les colonnes de 0 sont ignorées * \param mat Une matrice échelonnée. */ Vect(const Matrix& mat); /** * \brief Permet d'obtenir le ieme vecteur de la base * \param index l'index du vecteur souhaité * \return Une matrice colonne */ Matrix GetVector(std::size_t index) const; /** * \brief Retourne le nombre de coordonnées des vecteurs de la base (leur nombre de colonne) */ std::size_t GetDimension() const; /** * \brief Retourne le nombre de vecteur de la base */ std::size_t GetCardinal() const; /** * \brief Exprime l'espace vectoriel comme les solutions d'un système linéaire des coordonnées des vecteurs * \return Une matrice représentant le système linéaire */ Matrix GetLinearSystem() const; /** * \brief Concatène la base actuelle avec un nouveau vecteur * \param vec Une matrice colonne de taille GetDimension() */ void AddVector(const Matrix& vec); /** * \brief Vérifie si le vecteur spécifié appartient au sous-espace vectoriel * \param vec Une matrice colonne représentant le vecteur à tester */ bool IsElementOf(const Matrix& vec) const; bool operator==(const Vect& other) const; bool operator!=(const Vect& other) const; private: void Simplify(); }; /** * \class VectAffine * \brief Représente un espace affine */ class VectAffine { private: Vect m_Base; Matrix m_Origin; public: /** * \brief Construit un espace affine à partir d'un espace vectoriel et d'une origine * \param base La base de l'espace vectoriel * \param origin Le vecteur d'origine (matrice colonne) */ VectAffine(const Vect& base, const Matrix& origin); /** * \brief Retourne l'espace vectoriel correspondant */ const Vect& GetBase() const { return m_Base; } /** * \brief Retourne l'origine de l'espace affine * \return Un vecteur colonne */ const Matrix& GetOrigin() const { return m_Origin; } /** * \brief Vérifie si le vecteur spécifié appartient à l'espace affine * \param vec Une matrice colonne représentant le vecteur à tester */ bool IsElementOf(const Matrix& vec) const; bool operator==(const VectAffine& vect) const { return m_Origin == vect.GetOrigin() && m_Base == vect.GetBase(); }; };