X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Fkernel%2FmarVector.cpp;fp=lib%2FmaracasVisuLib%2Fsrc%2Fkernel%2FmarVector.cpp;h=0000000000000000000000000000000000000000;hb=a4ee3758aa0477f677fb981e2c4d6e29995e8db8;hp=7f92f0a9ef0125dbebedf9aea59c80c9c2d55d81;hpb=cc20770ee090848c31a8f18c277d89f2b904e087;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/kernel/marVector.cpp b/lib/maracasVisuLib/src/kernel/marVector.cpp deleted file mode 100644 index 7f92f0a..0000000 --- a/lib/maracasVisuLib/src/kernel/marVector.cpp +++ /dev/null @@ -1,720 +0,0 @@ -// marVector.cpp: implementation of the marVector class. -// -////////////////////////////////////////////////////////////////////// -#include "marVector.h" -#include -#include - - -////////////////////////////////////////////////////////////////////// -// Constructeurs -////////////////////////////////////////////////////////////////////// -marVector::marVector(size_t s) - :shallowCopy(false) -{ - if (s!=0) - { - _data=new double[s]; - _size=s; - } - else - { - _data=NULL; - _size=0; - assert(false); - } -} - -marVector::marVector(const marVector &v) - :shallowCopy(false) -{ - _size=v._size; - _data=new double[_size]; - int i; - for (i=0;i<_size;i++) - { - _data[i]=v._data[i]; - } -} - -marVector::marVector(double*v,size_t s) - :shallowCopy(true) -{ - if (s!=0) - { - _size=s; - _data=v; -// PS -> _data=new double[_size]; -// PS -> for (int i=0;i<_size;i++) -// PS -> { -// PS -> _data[i]=v[i]; -// PS -> } - - } - else - { - _data=NULL; - _size=0; - assert(false); - } - -} - -////////////////////////////////////////////////////////////////////// -// Destructeur -////////////////////////////////////////////////////////////////////// -marVector::~marVector() -{ - if (!shallowCopy) - { - delete _data; - } - else - { - _data=NULL; - } -} - -////////////////////////////////////////////////////////////////////// -// Opérateurs -////////////////////////////////////////////////////////////////////// -// --------------------------------------------------------------------- -/*Affichage*/ -std::ostream& operator<<(std::ostream& os,const marVector& v) -{ - int i; - for(i=0;i < v.size();i++) - { - os << " " << v(i); - } - os <<"\n"; - return(os); -} - -// --------------------------------------------------------------------- -/*Casting*/ -marVector::operator double*() const -{ - return(_data); -} - -// --------------------------------------------------------------------- -/*Indexation*/ -double& marVector::operator()(size_t i) -{ - return(_data[i]); -} - -const double& marVector::operator()(size_t i) const -{ - return(_data[i]); -} - -// --------------------------------------------------------------------- -/*Affectation*/ -marVector& marVector::operator=(const marVector& o) -{ - _size=o._size; - if (!(_data==NULL)&&(!shallowCopy)) - { - delete _data; - } - shallowCopy=false; - _data=new double[_size]; - int i; - for (i=0;i<_size;i++) - { - _data[i]=o._data[i]; - } - return (*this); -} - -marVector& marVector::operator=(double o) -{ - if (_size!=0) - { - if (!(_data==NULL)&&(!shallowCopy)) - { - delete _data; - } - shallowCopy=false; - _data=new double[_size]; - int i; - for (i=0;i<_size;i++) - { - _data[i]=o; - } - } - else - { - assert(false); - } - return (*this); -} - -marVector& marVector::operator=(double*o) -{ - if (_size!=0) - { - if (!(_data==NULL)&&(!shallowCopy)) - { - delete _data; - } - shallowCopy=false; - _data=new double[_size]; - int i; - for (i=0;i<_size;i++) - { - _data[i]=o[i]; - } - } - else - { - assert(false); - } - return (*this); -} - -// --------------------------------------------------------------------- -/*Comparaison*/ -bool marVector::operator==(const marVector& o) const -{ - bool equal=true; - - if(_size!=o._size) - { - return(false); - } - - int i; - for(i=0;i<_size && equal;i++) - { - equal=equal && (_data[i]==o._data[i]); - } - return(equal); -} - -bool marVector::operator!=(const marVector& o) const -{ - return(!((*this)==o)); -} - -// --------------------------------------------------------------------- -/*Addition*/ -marVector marVector::operator+(const marVector& o) -{ - marVector result(*this); - size_t s=result._size; - - if ((o._size!=s) || (s==0)) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] +=o._data[i]; - } - } - return result; -} - -marVector marVector::operator+(double o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] +=o; - } - } - return result; -} - -marVector marVector::operator+(double*o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] +=o[i]; - } - } - return result; -} - -// --------------------------------------------------------------------- -/*Addition + Affectation*/ -marVector& marVector::operator+=(const marVector& o) -{ - if ((o._size!=_size) || (_size==0)) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] +=o._data[i]; - } - } - return (*this); -} - -marVector& marVector::operator+=(double o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] +=o; - } - } - return(*this); -} - -marVector& marVector::operator+=(double*o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] +=o[i]; - } - } - return(*this); -} - -// --------------------------------------------------------------------- -/*Soustraction*/ -marVector marVector::operator-(const marVector& o) -{ - marVector result(*this); - size_t s=result._size; - - if ((o._size !=s) || (s==0)) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] -=o._data[i]; - } - } - return result; -} - -marVector marVector::operator-(double o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] -=o; - } - } - return result; -} - -marVector marVector::operator-(double*o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] -=o[i]; - } - } - return result; -} - -// --------------------------------------------------------------------- -/*Sooustraction + Affection*/ -marVector& marVector::operator-=(const marVector& o) -{ - if ((o._size!=_size) || (_size==0)) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] -=o._data[i]; - } - } - return (*this); -} - -marVector& marVector::operator-=(double o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] -=o; - } - } - return(*this); -} - -marVector& marVector::operator-=(double*o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] -=o[i]; - } - } - return(*this); -} - -// --------------------------------------------------------------------- -/*Multiplication (produit scalaire)*/ -marVector marVector::operator*(double o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i]*=o; - } - } - return result; -} - -// --------------------------------------------------------------------- -/*Multiplication (produit scalaire) + Affectation*/ -marVector& marVector::operator*=(double o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i]*=o; - } - } - return(*this); -} - -// --------------------------------------------------------------------- -/*Division (division scalaire)*/ -marVector marVector::operator/(double o) -{ - marVector result(*this); - size_t s=result._size; - - if (s==0) - { - assert(false); - } - else - { - for (int i=0;i < s;i++) - { - result._data[i] /=o; - } - } - return result; -} - -// --------------------------------------------------------------------- -/*Division (division scalaire) + Affectation*/ -marVector& marVector::operator/=(double o) -{ - if (_size==0) - { - assert(false); - } - else - { - for (int i=0;i < _size;i++) - { - _data[i] /=o; - } - } - return(*this); -} - -////////////////////////////////////////////////////////////////////// -// Opérations -////////////////////////////////////////////////////////////////////// -// --------------------------------------------------------------------- -/*Produit scalaire*/ -double marVector::dot(const marVector& o) -{ - double result; - if ((_size!=o._size) || (_size==0)) - { - assert(false); - } - else - { - result=0.0; - for (int i=0;i<_size;i++) - { - result+=(_data[i]*o._data[i]); - } - } - return result; -} - -double marVector::dot(double*o) -{ - double result; - if (_size==0) - { - assert(false); - } - else - { - result=0.0; - for (int i=0;i<_size;i++) - { - result+=(_data[i]*o[i]); - } - } - return result; -} - -// --------------------------------------------------------------------- -/*Produit vectoriel*/ -marVector marVector::cross(const marVector& o) -{ - marVector result(*this); - if ((o._size!=_size) || (_size!=3)) - { - assert(false); - } - else - { - double S,s; - - // 1st element - S=_data[1]*o._data[2]; - s=_data[2]*o._data[1]; - result._data[0]=S - s; - - // 2nd element - S=_data[2]*o._data[0]; - s=_data[0]*o._data[2]; - result._data[1]=S - s; - - // 3rd element - S=_data[0]*o._data[1]; - s=_data[1]*o._data[0]; - result._data[2]=S - s; - } - return(result); -} - -marVector marVector::cross(double*o) -{ - marVector result(*this); - if (_size!=3) - { - assert(false); - } - else - { - double S,s; - - // 1st element - S=_data[1]*o[2]; - s=_data[2]*o[1]; - result._data[0]=S - s; - - // 2nd element - S=_data[2]*o[0]; - s=_data[0]*o[2]; - result._data[1]=S - s; - - // 3rd element - S=_data[0]*o[1]; - s=_data[1]*o[0]; - result._data[2]=S - s; - } - return(result); -} - -int marVector::scross(const marVector& o) -{ - if ((o._size!=_size) && (_size!=3)) - { - return (1); - } - else - { - *this=cross(o); - return(0); - } -} - -int marVector::scross(double*o) -{ - if (_size!=3) - { - return (1); - } - else - { - *this=cross(o); - return(0); - } -} - -// --------------------------------------------------------------------- -/*Norme euclidienne*/ -double marVector::norm2() -// Calcule la norme euclidienne du vecteur -// en utilisant l'agorithme de Blue -{ - - double norme2=0.0; - if (_size==0) - { - assert(false); - } - else - { - const double seuil1=pow( 2., 154. ),seuil2=1/seuil1; - double n1=0; /* les sommes partielles */ - double n2=0; - double n3=0; - double n4; - int i; - for ( i=0; i<_size; i++ ) - { - double x=_data[i]; /* x=abs(vecteur[i]) */ - - if (x<0) - { - x=-x; - } - /* sommation par classe */ - if ( x > seuil1 ) - { - x *=seuil2; - n1 +=x*x; - } - else if ( x < seuil2 ) - { - x *=seuil1; - n2 +=x*x; - } - else - { - n3 +=x*x; - } - } - - n3=sqrt(n3); - if (n1>0) - { - n4=seuil1 * sqrt(n1); - } - else - { - n4=seuil2 * sqrt(n2); - } - -// EED -/* - if (n3 < n4) - { - n3 /=n4; - norme2=n4 * sqrt( 1 + n3*n3 ); - } - else - { - n4 /=n3; - norme2=n3 * sqrt( 1 + n4*n4 ); - } -*/ - norme2=n3; - } - return norme2; -} - -// --------------------------------------------------------------------- -/*Normalisation*/ -marVector marVector::normalize( ) -{ - marVector result=marVector(*this); - result *= (1/result.norm2()); - return result; -} - -int marVector::snormalize( ) -{ - (*this)*=(1/this->norm2()); - return(0); -}// renvoie 0 si OK, 1 sinon - -////////////////////////////////////////////////////////////////////// -// Méthodes -////////////////////////////////////////////////////////////////////// - -size_t marVector::size() const -{ - return _size; -}