// FICHIER : Coordonnee.h // CLASSE : Coordonnee // This file is part of the Herezh++ application. // // The finite element software Herezh++ is dedicated to the field // of mechanics for large transformations of solid structures. // It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600) // INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) . // // Herezh++ is distributed under GPL 3 license ou ultérieure. // // Copyright (C) 1997-2021 Université Bretagne Sud (France) // AUTHOR : Gérard Rio // E-MAIL : gerardrio56@free.fr // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // For more information, please consult: . // La classe Coordonnee sert a la localisation dans l'espace des objets tels que les // noeuds ou les elements. Une instance de cette classe est caracterisee par le nombre // de coordonnees et par la valeur de celles-ci. // Les valeurs des coordonnees sont de type double et sont stockees dans un tableau // dont la taille depend de la dimension du probleme. #ifndef COORDONNEE_H #define COORDONNEE_H //#include "Debug.h" #include #include #include #include "Sortie.h" class Vecteur; // declare a la fin du fichier, car vecteur utilise aussi coordonnees class Coordonnee { // surcharge de l'operator de lecture friend istream & operator >> (istream &, Coordonnee &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const Coordonnee &); // Surcharge de l'operateur * : multiplication entre un scalaire et des coordonnees inline friend Coordonnee operator* (double val,Coordonnee& c) { return (c*val); }; public : // CONSTRUCTEURS : // Constructeur par defaut Coordonnee (); // Constructeur fonction de la dimension du probleme // les coordonnees sont initialise a zero Coordonnee (int dimension); // Constructeur pour une localisation unidimensionnelle Coordonnee (double x); // Constructeur pour une localisation bidimensionnelle Coordonnee (double x,double y); // Constructeur pour une localisation tridimensionnelle Coordonnee (double x,double y,double z); // constructeur fonction d'une adresse memoire ou sont stockee les coordonnees // et d'une dimension ( l'existance de la place mémoire est a la charge // de l'utilisateur. Coordonnee (int dimension,double* t); // Constructeur fonction d'un vecteur qui doit avoir une dim = 1 ou 2 ou 3 Coordonnee ( const Vecteur& vec); // Constructeur de copie Coordonnee (const Coordonnee& c); // DESTRUCTEUR : ~Coordonnee (); // METHODES : inline int Dimension () const // Renvoie le nombre de coordonnees { return dim; }; inline void Libere () // Desallocation de la place memoire allouee { if ( dim>0 ) delete [] coord; else {if ( coord!=NULL ) { cout << "\nErreur de liberation de la place memoire\n"; cout << "COORDONNEE::LIBERE () \n"; Sortie(1); } } coord=NULL; dim=0; }; // Renvoie la ieme coordonnee inline double& operator() (int i) { #ifdef MISE_AU_POINT if ( (i<1) || (i>dim) ) { cout << "\nErreur de dimension !\n"; cout << "COORDONNEE::OPERATOR() (int ) \n"; Sortie(1); }; #endif return coord[i-1]; }; // Renvoie une copie de la ieme coordonnee inline double operator() (int i) const { #ifdef MISE_AU_POINT if ( (i<1) || (i>dim) ) { cout << "\nErreur de dimension !\n"; cout << "COORDONNEE::OPERATOR() (int ) \n"; Sortie(1); }; #endif return coord[i-1]; }; // Surcharge de l'operateur = : realise l'affectation entre deux points Coordonnee& operator= (const Coordonnee& c); // Surcharge de l'operateur = avec un vecteur Coordonnee& operator= ( const Vecteur& c); inline Coordonnee operator- () const // Surcharge de l'operateur - : renvoie l'oppose d'un point { Coordonnee result(dim); for (int i=0;i