// 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