109 lines
2.5 KiB
C++
109 lines
2.5 KiB
C++
#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();
|
|
};
|
|
}; |