Meilleure façon de représenter un champ vectoriel ?
Bonjour,
Voila j'ai besoin d'une classe ChampVectoriel mais sachant que j'ai déjà une classe ChampScalaire j'ai deux choix possible pour faire celle-ci.
Ma classe ChampScalaire peut se résumer à ceci
Code:
1 2 3 4 5 6 7 8 9
|
class ChampScalaire
{
private:
float m_pas; //Pas de discrétisation suivant X et Y.
unsigned int m_tailleX; //nb de cases suivant X.
unsigned int m_tailleY; //nb de cases suivant Y.
std::vector<float> m_champ; //tableau contenant les valeurs du champ en chaque point
}; |
Et donc comme premier choix pour ma classe ChampVectoriel je peux faire ça:
Code:
1 2 3 4 5 6 7
|
class ChampVectoriel
{
private:
ChampScalaire m_x;
ChampScalaire m_y;
}; |
Avantage:
-Réutilisation de la classe précédente
Inconvénient:
-Obligé de faire les calculs composante pas composante (répétition de code)
La deuxième possibilité est la suivante:
Code:
1 2 3 4 5 6 7 8 9
|
class ChampVectoriel
{
private:
float m_pas; //Pas de discrétisation suivant X et Y.
unsigned int m_tailleX; //nb de cases suivant X.
unsigned int m_tailleY; //nb de cases suivant Y.
std::vector<Vecteur> m_champ; //tableau contenant les vecteurs du champ en chaque point
}; |
Inconvénient:
-Avoir une classe vecteur (en fait je l'ai déjà mais bon le code devient plus gros)
-Niveau performance c'est mieux d'avoir un gros tableau (mon champ) avec plein de petits tableau de deux cases (mes vecteurs) ou alors deux gros tableaux (champ suivant x et y)?
Avantage:
-Possibilité d’utiliser les surcharges d'opérateur de la classe Vecteur et donc le code devient plus propre quand je fais des calculs, par ex:
Code:
1 2 3 4
|
ChampVectoriel champ(10,20) //champ 10*20 cases
champ(i,j)=champ(i,j)*2+vecteur; |
Qu’en pensez vous ?
Merci.