MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
ot_mathematique.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// ot_mathematique.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include <iomanip>
25 #include <math.h>
26 #include <string.h>
27 #include <assert.h>
28 #include <algorithm>
29 #include <fstream>
30 #include "ot_mathematique.h"
31 
32 
34 {
35  m_i_min=0;
36  m_i_max=0;
37  m_init=false;
39 }
40 
41 OT_HISTOGRAMME::OT_HISTOGRAMME(double largeur_colonne):m_largeur_colonne(largeur_colonne)
42 {
43  m_i_min=0;
44  m_i_max=0;
45  m_init=false;
46 }
47 
49 {
51  m_i_min=mdd.m_i_min;
52  m_i_max=mdd.m_i_max;
53  m_init=mdd.m_init;
55 }
56 
57 OT_HISTOGRAMME::OT_HISTOGRAMME(double largeur_colonne, OT_HISTOGRAMME& mdd):m_largeur_colonne(largeur_colonne)
58 {
59  m_i_min=0;
60  m_i_max=0;
61  m_init=false;
62  std::map<long,double>::iterator it;
63  double val;
64  double borne_min;
65  double borne_max;
66  int ret=mdd.get_premiere_valeur(it,val,borne_min,borne_max);
67  while(ret!=0)
68  {
69  ajouter_valeur(borne_min,val);
70  ret=mdd.get_suivante_valeur(it,val,borne_min,borne_max);
71  }
72 }
73 
74 
76 {
77  m_map_colonne.clear();
78 }
79 
80 void OT_HISTOGRAMME::fixe_largeur_colonne(double largeur_colonne)
81 {
82  m_largeur_colonne=largeur_colonne;
83 }
84 
86 {
87  return m_largeur_colonne;
88 }
89 
90 void OT_HISTOGRAMME::ajouter_valeur(double x,double val)
91 {
92  long i = (long)(x/m_largeur_colonne);
93  ajouter_valeur(i,val);
94 }
95 
96 void OT_HISTOGRAMME::ajouter_valeur(long int i, double val)
97 {
98  if(!m_init)
99  {
100  m_i_min=i;
101  m_i_max=i;
102  m_map_colonne.insert(std::pair<long,double>(i,val));
103  m_init=true;
104  }
105  else if(i>m_i_max)
106  {
107  m_i_max=i;
108  m_map_colonne.insert(std::pair<long,double>(i,val));
109  }
110  else if(i<m_i_min)
111  {
112  m_i_min=i;
113  m_map_colonne.insert(std::pair<long,double>(i,val));
114  }
115  else
116  {
117  std::map<long,double>::iterator it;
118  it=m_map_colonne.find(i);
119  if(it==m_map_colonne.end())
120  {
121  m_map_colonne.insert(std::pair<long,double>(i,val));
122  }
123  else it->second+=val;
124  }
125 }
126 
127 int OT_HISTOGRAMME::get_valeur(double x, double& val)
128 {
129  long i = (long)(x/m_largeur_colonne);
130  return get_valeur(i,val);
131 }
132 
133 int OT_HISTOGRAMME::get_valeur(long i, double& val)
134 {
135  std::map<long,double>::iterator it;
136  it=m_map_colonne.find(i);
137  if(it==m_map_colonne.end())
138  {
139  return 0;
140  }
141  val=it->second;
142  return 1;
143 }
144 
145 
146 int OT_HISTOGRAMME::get_premiere_valeur(std::map< long, double >::iterator& it,double &valeur)
147 {
148  it=m_map_colonne.begin();
149  if(it==m_map_colonne.end()) return 0;
150  valeur = it->second;
151  return 1;
152 }
153 
154 int OT_HISTOGRAMME::get_suivante_valeur(std::map< long, double >::iterator& it,double &valeur)
155 {
156  it++;
157  if(it==m_map_colonne.end()) return 0;
158  valeur = it->second;
159  return 1;
160 }
161 
162 int OT_HISTOGRAMME::get_premiere_valeur(std::map< long, double >::iterator& it,double &valeur,double &borne_min,double &borne_max)
163 {
164  it=m_map_colonne.begin();
165  if(it==m_map_colonne.end()) return 0;
166  valeur = it->second;
167  borne_min=(it->first)*m_largeur_colonne;
168  borne_max=(it->first)*m_largeur_colonne+m_largeur_colonne;
169  return 1;
170 }
171 
172 int OT_HISTOGRAMME::get_suivante_valeur(std::map< long, double >::iterator& it,double &valeur,double &borne_min,double &borne_max)
173 {
174  it++;
175  if(it==m_map_colonne.end()) return 0;
176  valeur = it->second;
177  borne_min=(it->first)*m_largeur_colonne;
178  borne_max=(it->first)*m_largeur_colonne+m_largeur_colonne;
179  return 1;
180 }
181 
182 int OT_HISTOGRAMME::get_premiere_valeur(std::map< long, double >::iterator& it, double &valeur, long int& i)
183 {
184  it=m_map_colonne.begin();
185  if(it==m_map_colonne.end()) return 0;
186  valeur = it->second;
187  i = it->first;
188  return 1;
189 }
190 
191 int OT_HISTOGRAMME::get_suivante_valeur(std::map< long, double >::iterator& it, double &valeur, long int& i)
192 {
193  it++;
194  if(it==m_map_colonne.end()) return 0;
195  valeur = it->second;
196  i = it->first;
197  return 1;
198 }
199 
201 {
202  return m_map_colonne.size();
203 }
204 
206 {
207  return m_i_min*m_largeur_colonne;
208 }
209 
211 {
213 }
214 
216 {
218  m_i_min=mdd.m_i_min;
219  m_i_max=mdd.m_i_max;
220  m_init=mdd.m_init;
222  return *this;
223 }
224 
226 {
228  m_i_min=mdd.m_i_min;
229  m_i_max=mdd.m_i_max;
230  m_init=mdd.m_init;
232  return *this;
233 }
234 
235 
236 void OT_HISTOGRAMME::enregistrer_bin(std::ofstream& ofstr)
237 {
238  ofstr.write((char*)&m_init,sizeof(bool));
239  ofstr.write((char*)&m_i_min,sizeof(long));
240  ofstr.write((char*)&m_i_max,sizeof(long));
241  ofstr.write((char*)&m_largeur_colonne,sizeof(double));
242  long nb_colonne = get_nb_colonne();
243  ofstr.write((char*)&nb_colonne,sizeof(long));
244  std::map<long,double>::iterator it;
245  for(it=m_map_colonne.begin();it!=m_map_colonne.end();it++)
246  {
247  long i = it->first;
248  ofstr.write((char*)&i,sizeof(long));
249  double val = it->second;
250  ofstr.write((char*)&val,sizeof(double));
251  }
252 }
253 
254 void OT_HISTOGRAMME::ouvrir_bin(std::ifstream& ifstr)
255 {
256  ifstr.read((char*)&m_init,sizeof(bool));
257  ifstr.read((char*)&m_i_min,sizeof(long));
258  ifstr.read((char*)&m_i_max,sizeof(long));
259  ifstr.read((char*)&m_largeur_colonne,sizeof(double));
260  long nb_colonne;
261  ifstr.read((char*)&nb_colonne,sizeof(long));
262  for(long j=0;j<nb_colonne;j++)
263  {
264  long k;
265  ifstr.read((char*)&k,sizeof(long));
266  double val;
267  ifstr.read((char*)&val,sizeof(double));
268  ajouter_valeur(k,val);
269  }
270 }
271 
272 void OT_HISTOGRAMME::ouvrir_txt(char* nom_fichier)
273 {
274  FILE* in=fopen(nom_fichier,"rt");
275  char ligne[1000];
276  char *res=fgets(ligne,1000,in);
277  res=fgets(ligne,1000,in);
278  double xmin,xmax,xmilieu,val;
279  while(!feof(in))
280  {
281  sscanf(ligne,"%lf %lf %lf %lf",&xmin,&xmax,&xmilieu,&val);
282  if(m_init==false)
283  {
284  m_largeur_colonne=fabs(xmax-xmin);
285  }
286  ajouter_valeur(xmin,val);
287  res=fgets(ligne,1000,in);
288  }
289 }
290 
291 void OT_HISTOGRAMME::exporter(std::ofstream& ofstrm)
292 {
293  ofstrm << "x_min x_max x_milieu valeur" << std::endl;
294  std::map<long,double>::iterator it_his;
295  double val;
296  double borne_min,borne_max;
297  int k=get_premiere_valeur(it_his,val,borne_min,borne_max);
298  while(k!=0)
299  {
300  double borne_mid = borne_min+m_largeur_colonne/2.;
301  ofstrm << borne_min << " " << borne_max << " " << borne_mid << " " << val << std::endl;
302  k=get_suivante_valeur(it_his,val,borne_min,borne_max);
303  }
304 }
305 
306 
308 {
309  valeur[0]=0;
310  valeur[1]=0;
311  valeur[2]=0;
312  valeur[3]=0;
313 }
314 
315 OT_QUATERNION::OT_QUATERNION(double x, double y, double z, double w)
316 {
317  valeur[0]=x;
318  valeur[1]=y;
319  valeur[2]=z;
320  valeur[3]=w;
321 }
322 
324 {
325  valeur[0]=mdd.valeur[0];
326  valeur[1]=mdd.valeur[1];
327  valeur[2]=mdd.valeur[2];
328  valeur[3]=mdd.valeur[3];
329 }
330 
332 {
333  return valeur[0];
334 }
335 
337 {
338  valeur[0]=x;
339 }
340 
342 {
343  return valeur[1];
344 }
345 
347 {
348  valeur[1]=y;
349 }
350 
352 {
353  return valeur[2];
354 }
355 
357 {
358  valeur[2]=z;
359 }
360 
362 {
363  return valeur[3];
364 }
365 
367 {
368  valeur[3]=w;
369 }
370 
372 {
373  valeur[0]=mdd.valeur[0];
374  valeur[1]=mdd.valeur[1];
375  valeur[2]=mdd.valeur[2];
376  valeur[3]=mdd.valeur[3];
377  return *this;
378 }
379 
380 
381 OT_VECTEUR_3D::OT_VECTEUR_3D(double x,double y,double z)
382 {
383  valeur[0]=x;
384  valeur[1]=y;
385  valeur[2]=z;
386 }
387 
388 
390 {
391  valeur[0]=xyz[0];
392  valeur[1]=xyz[1];
393  valeur[2]=xyz[2];
394 }
395 
396 OT_VECTEUR_3D::OT_VECTEUR_3D(double *xyz1,double *xyz2)
397 {
398  valeur[0]=xyz2[0]-xyz1[0];
399  valeur[1]=xyz2[1]-xyz1[1];
400  valeur[2]=xyz2[2]-xyz1[2];
401 }
402 
404 {
405  valeur[0]=mdd.valeur[0];
406  valeur[1]=mdd.valeur[1];
407  valeur[2]=mdd.valeur[2];
408 }
409 
411 {
412  valeur[0]=0.;
413  valeur[1]=0.;
414  valeur[2]=0.;
415 }
416 
417 double OT_VECTEUR_3D::get_x(void) const
418 {
419  return valeur[0];
420 }
421 
422 
423 double OT_VECTEUR_3D::get_y(void) const
424 {
425  return valeur[1];
426 }
427 
428 
429 double OT_VECTEUR_3D::get_z(void) const
430 {
431  return valeur[2];
432 }
433 
435 {
436  valeur[0]=x;
437 }
438 
440 {
441  valeur[1]=y;
442 }
443 
445 {
446  valeur[2]=z;
447 }
448 
450 {
451  return valeur;
452 }
453 
454 OT_VECTEUR_3D::operator const double* () const
455 {
456  return valeur;
457 }
458 
459 OT_VECTEUR_3D::operator double* ()
460 {
461  return valeur;
462 }
463 
464 double OT_VECTEUR_3D::operator[] (int i) const
465 {
466  return valeur[i];
467 }
468 
470 {
471  return valeur[i];
472 }
473 
474 double OT_VECTEUR_3D::operator() (int i) const
475 {
476  return valeur[i];
477 }
479 {
480  return valeur[i];
481 }
482 
483 double OT_VECTEUR_3D::get_longueur(void) const
484 {
485  return sqrt(valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]);
486 }
487 
489 {
490  return (valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]);
491 }
492 
493 
495 {
496  double longueur=get_longueur();
497  if (longueur != 0)
498  {
499  valeur[0]=valeur[0]/longueur;
500  valeur[2]=valeur[2]/longueur;
501  valeur[1]=valeur[1]/longueur;
502  }
503 }
504 
506 {
507  OT_VECTEUR_3D v(0.,0.,0.);
508  double alpha=(*this)*vint;
509  v= *this-alpha*vint;
510  return v;
511 }
512 
514 {
515  OT_VECTEUR_3D v(0.,0.,0.);
516  v[i]=1.;
517  return v;
518 }
519 
520 
522 {
523  return memcmp(valeur, mdd.valeur, 3*sizeof(double));
524 }
525 
527 {
528  return compare_valeur(mdd) == 0;
529 }
530 
532 {
533  return compare_valeur(mdd) != 0;
534 }
535 
537 {
538  return compare_valeur(mdd) < 0;
539 }
540 
542 {
543  return compare_valeur(mdd) <= 0;
544 }
545 
547 {
548  return compare_valeur(mdd) > 0;
549 }
550 
552 {
553  return compare_valeur(mdd) >= 0;
554 }
555 
556 std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3D & __vec)
557 {
558  __os << "{ "<< __vec[0]<<", "<<__vec[1]<<", "<<__vec[2]<<"}, ";
559  return __os;
560 }
561 
562 OT_VECTEUR_3D operator/ (const OT_VECTEUR_3D& mdd1, double diviseur)
563 {
564  OT_VECTEUR_3D kQuot;
565 
566  if ( diviseur != (double)0.0 )
567  {
568  double facteur = ((double)1.0)/diviseur;
569  kQuot.valeur[0] = facteur*mdd1.valeur[0];
570  kQuot.valeur[1] = facteur*mdd1.valeur[1];
571  kQuot.valeur[2] = facteur*mdd1.valeur[2];
572  }
573  else
574  {
575  kQuot.valeur[0] = 1E300;
576  kQuot.valeur[1] = 1E300;
577  kQuot.valeur[2] = 1E300;
578  }
579 
580  return kQuot;
581 }
582 
584 {
585  return OT_VECTEUR_3D(
586  -mdd1.valeur[0],
587  -mdd1.valeur[1],
588  -mdd1.valeur[2]);
589 }
590 
591 double operator*(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2)
592 {
593  double tmp;
594  tmp=mdd1.valeur[0]*mdd2.valeur[0]+mdd1.valeur[1]*mdd2.valeur[1]+mdd1.valeur[2]*mdd2.valeur[2];
595  return tmp;
596 }
597 
598 OT_VECTEUR_3D operator*(double mdd1,const OT_VECTEUR_3D& mdd2)
599 {
600  OT_VECTEUR_3D tmp;
601  tmp.valeur[0]=mdd1*mdd2.valeur[0];
602  tmp.valeur[1]=mdd1*mdd2.valeur[1];
603  tmp.valeur[2]=mdd1*mdd2.valeur[2];
604  return tmp;
605 }
606 
608 {
609  valeur[0] += mdd.valeur[0];
610  valeur[1] += mdd.valeur[1];
611  valeur[2] += mdd.valeur[2];
612  return *this;
613 }
615 {
616  valeur[0] -= mdd.valeur[0];
617  valeur[1] -= mdd.valeur[1];
618  valeur[2] -= mdd.valeur[2];
619  return *this;
620 }
622 {
623  valeur[0] *= facteur;
624  valeur[1] *= facteur;
625  valeur[2] *= facteur;
626  return *this;
627 }
629 {
630  if ( diviseur != (double)0.0 )
631  {
632  double facteur = ((double)1.0)/diviseur;
633  valeur[0] *= facteur;
634  valeur[1] *= facteur;
635  valeur[2] *= facteur;
636  }
637  else
638  {
639  valeur[0] = 1E300;
640  valeur[1] = 1E300;
641  valeur[2] = 1E300;
642  }
643 
644  return *this;
645 }
646 
648 {
649  OT_VECTEUR_3D tmp;
650  tmp.valeur[0]=mdd1.valeur[1]*mdd2.valeur[2]-mdd1.valeur[2]*mdd2.valeur[1];
651  tmp.valeur[1]=mdd1.valeur[2]*mdd2.valeur[0]-mdd1.valeur[0]*mdd2.valeur[2];
652  tmp.valeur[2]=mdd1.valeur[0]*mdd2.valeur[1]-mdd1.valeur[1]*mdd2.valeur[0];
653  return tmp;
654 }
655 
657 {
658  return 0.33333333333333*(fabs(valeur[0])+fabs(valeur[1])+fabs(valeur[2]));
659 }
660 
661 
663 {
664  vec[0]=colonne1;
665  vec[1]=colonne2;
666  vec[2]=colonne3;
667 }
668 
670 {
671  vec[0]=mdd.vec[0];
672  vec[1]=mdd.vec[1];
673  vec[2]=mdd.vec[2];
674 }
675 
677 {
678  for (int i=0;i<3;i++)
679  {
680  for (int j=0;j<3;j++)
681  {
682  vec[i][j]=0.;
683  }
684 
685  }
686 
687 }
688 std::ostream & operator << ( std::ostream & __os, const OT_MATRICE_3D & __mat)
689 {
690 
691  __os << "{ ";
692  for (unsigned i=0; i<3; i++)
693  {
694  __os << "[ "<< __mat(i,0)<<" ]\t [ "<<__mat(i,1) <<" ]\t [ "<<__mat(i,2);
695  if (i+1 < 3)
696  __os << std::endl << " ";
697  }
698  __os << " }" << std::endl;
699  return __os;
700 }
701 
703 {
704  return vec[i];
705 }
706 
708 {
709  for (int i=0;i<3;i++)
710  {
711  for (int j=0;j<3;j++)
712  {
713  vec[i][j]=t[i*3+j];
714  }
715 
716  }
717 }
718 
719 double OT_MATRICE_3D::valeur(int iLigne, int iCol) const
720 {
721  return vec[iCol][iLigne];
722 }
723 double & OT_MATRICE_3D::valeur(int iLigne, int iCol)
724 {
725  return vec[iCol][iLigne];
726 }
727 double OT_MATRICE_3D::operator() (int iLigne, int iCol) const
728 {
729  return vec[iCol][iLigne];
730 }
731 double & OT_MATRICE_3D::operator() (int iLigne, int iCol)
732 {
733  return vec[iCol][iLigne];
734 }
736 {
737  double coFacteur0 = valeur(1,1)*valeur(2,2) - valeur(1,2)*valeur(2,1);
738  double coFacteur1 = valeur(1,2)*valeur(2,0) - valeur(1,0)*valeur(2,2);
739  double coFacteur2 = valeur(1,0)*valeur(2,1) - valeur(1,1)*valeur(2,0);
740  double determinant = valeur(0,0)*coFacteur0 + valeur(0,1)*coFacteur1 + valeur(0,2)*coFacteur2;
741  return determinant;
742 }
744 {
745  for (unsigned i = 0; i<3; i++)
746  for (unsigned j = 0; j < 3; j++)
747  vec[i][j] = (i==j) ? 1.0 : 0.0 ;
748 }
749 
751 {
752  for (unsigned i = 0; i<3; i++)
753  for (unsigned j = 0; j < 3; j++)
754  res.vec[i][j] = vec[j][i];
755 }
756 
758 {
759  OT_MATRICE_3D temp;
760  for (unsigned i = 0; i<3; i++)
761  for (unsigned j = 0; j < 3; j++)
762  temp.valeur(i,j) =valeur(j,i);
763 
764  return temp;
765 }
766 
768 {
769  // Invert a 3x3 using cofactors. This is faster than using a generic
770  // Gaussian elimination because of the loop overhead of such a method.
771 
772  OT_MATRICE_3D matInverse;
773 
774  matInverse.valeur(0,0) = valeur(1,1)*valeur(2,2) - valeur(1,2)*valeur(2,1);
775  matInverse.valeur(0,1) = valeur(0,2)*valeur(2,1) - valeur(0,1)*valeur(2,2);
776  matInverse.valeur(0,2) = valeur(0,1)*valeur(1,2) - valeur(0,2)*valeur(1,1);
777  matInverse.valeur(1,0) = valeur(1,2)*valeur(2,0) - valeur(1,0)*valeur(2,2);
778  matInverse.valeur(1,1) = valeur(0,0)*valeur(2,2) - valeur(0,2)*valeur(2,0);
779  matInverse.valeur(1,2) = valeur(0,2)*valeur(1,0) - valeur(0,0)*valeur(1,2);
780  matInverse.valeur(2,0) = valeur(1,0)*valeur(2,1) - valeur(1,1)*valeur(2,0);
781  matInverse.valeur(2,1) = valeur(0,1)*valeur(2,0) - valeur(0,0)*valeur(2,1);
782  matInverse.valeur(2,2) = valeur(0,0)*valeur(1,1) - valeur(0,1)*valeur(1,0);
783 
784  double det = valeur(0,0)*matInverse(0,0) + valeur(0,1)*matInverse(1,0)+
785  valeur(0,2)*matInverse(2,0);
786 
787  if ( fabs(det) <= 1E-100 )
788  {
789  matInverse.identite();
790  return matInverse;
791  }
792 
793  double invDet = 1/det;
794 
795  for (int i=0; i<3; i++)
796  for (int j=0; j<3; j++)
797  matInverse.vec[i][j] *= invDet;
798 
799  return matInverse;
800 }
801 
803 {
804  vec[0]=v;
805 }
807 {
808  vec[1]=v;
809 }
811 {
812  vec[2]=v;
813 }
815 {
816  return vec[0];
817 }
819 {
820  return vec[1];
821 }
823 {
824  return vec[2];
825 }
826 
827 
828 
830 {
831  OT_MATRICE_3D tmp;
832  for (int i=0;i<3;i++) {
833  for (int j=0;j<3;j++) tmp(i,j)= mdd1(i,j)+mdd2(i,j);
834  }
835  return tmp;
836 }
837 
838 
840 {
841  OT_VECTEUR_3D tmp;
842  tmp(0)=mdd1(0,0)*mdd2(0)+mdd1(0,1)*mdd2(1)+mdd1(0,2)*mdd2(2);
843  tmp(1)=mdd1(1,0)*mdd2(0)+mdd1(1,1)*mdd2(1)+mdd1(1,2)*mdd2(2);
844  tmp(2)=mdd1(2,0)*mdd2(0)+mdd1(2,1)*mdd2(1)+mdd1(2,2)*mdd2(2);
845  return tmp;
846 }
847 
849 {
850  OT_VECTEUR_3D tmp;
851  tmp(0)=mdd1(0)+mdd2(0);
852  tmp(1)=mdd1(1)+mdd2(1);
853  tmp(2)=mdd1(2)+mdd2(2);
854  return tmp;
855 }
856 
857 OT_VECTEUR_3D operator-(const class OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2)
858 {
859  OT_VECTEUR_3D tmp;
860  tmp.valeur[0]=mdd1.valeur[0]-mdd2.valeur[0];
861  tmp.valeur[1]=mdd1.valeur[1]-mdd2.valeur[1];
862  tmp.valeur[2]=mdd1.valeur[2]-mdd2.valeur[2];
863  return tmp;
864 }
865 
867 {
868  OT_MATRICE_3D tmp;
869  for (int i=0; i<3; i++)
870  for (int j=0; j<3; j++)
871  {
872  tmp(i,j) = 0;
873  for (int k=0; k<3; k++)
874  tmp(i,j) += mdd1(i,k)*mdd2(k,j);
875  }
876  return tmp;
877 }
878 
879 #ifdef ot_vecteur_4d
880 OT_VECTEUR_4D::OT_VECTEUR_4D (double v[4])
881 {
882  for (int i=0; i<4; i++)
883  valeur[i]=v[i];
884 }
885 
886 OT_VECTEUR_4D::OT_VECTEUR_4D (double x, double y, double z, double w)
887 {
888  valeur[0] = x;
889  valeur[1] = y;
890  valeur[2] = z;
891  valeur[3] = w;
892 }
893 
894 OT_VECTEUR_4D::OT_VECTEUR_4D(double *xyz1,double *xyz2)
895 {
896  valeur[0]=xyz2[0]-xyz1[0];
897  valeur[1]=xyz2[1]-xyz1[1];
898  valeur[2]=xyz2[2]-xyz1[2];
899  valeur[3]=xyz2[3]-xyz1[3];
900 }
901 
903 {
904  for (int i=0; i<4; i++)
905  valeur[i]=v[i];
906 }
907 
908 
910 {
911  return valeur[i];
912 }
913 
914 double OT_VECTEUR_4D::operator()(int i) const
915 {
916  return valeur[i];
917 }
918 
920 {
921  return valeur[i];
922 }
923 
924 double OT_VECTEUR_4D::operator[](int i) const
925 {
926  return valeur[i];
927 }
928 
929 OT_VECTEUR_4D::operator const double* () const
930 {
931  return valeur;
932 }
933 
934 OT_VECTEUR_4D::operator double* ()
935 {
936  return valeur;
937 }
938 
939 double OT_VECTEUR_4D::get_x(void) const
940 {
941  return valeur[0];
942 }
943 double & OT_VECTEUR_4D::x(void)
944 {
945  return valeur[0];
946 }
947 double OT_VECTEUR_4D::get_y(void) const
948 {
949  return valeur[1];
950 }
951 double & OT_VECTEUR_4D::y(void)
952 {
953  return valeur[1];
954 }
955 double OT_VECTEUR_4D::get_z(void) const
956 {
957  return valeur[2];
958 }
959 double & OT_VECTEUR_4D::z(void)
960 {
961  return valeur[2];
962 }
963 double OT_VECTEUR_4D::get_w(void) const
964 {
965  return valeur[3];
966 }
967 double & OT_VECTEUR_4D::w(void)
968 {
969  return valeur[3];
970 }
972 {
973  valeur[0] = x;
974 }
976 {
977  valeur[1] = y;
978 }
980 {
981  valeur[2] = z;
982 }
984 {
985  valeur[3] = w;
986 }
988 {
989  return valeur;
990 }
991 
993 {
994  return OT_VECTEUR_4D(
995  a(0)+valeur[0],a(1)+valeur[1],a(2)+valeur[2],a(3)+valeur[3]
996  );
997 }
998 
1000 {
1001  return OT_VECTEUR_4D(
1002  valeur[0]-a(0),valeur[1]-a(1),valeur[2]-a(2),valeur[3]-a(3)
1003  );
1004 }
1005 
1006 OT_VECTEUR_4D operator* (const OT_VECTEUR_4D & rkV, const double a)
1007 {
1008  return OT_VECTEUR_4D(
1009  a*rkV[0],a*rkV[1],a*rkV[2],a*rkV[3]
1010  );
1011 }
1012 OT_VECTEUR_4D operator* (const double a, const OT_VECTEUR_4D & rkV)
1013 {
1014  return OT_VECTEUR_4D(
1015  a*rkV[0],a*rkV[1],a*rkV[2],a*rkV[3]
1016  );
1017 }
1018 
1019 OT_VECTEUR_4D operator/ (const OT_VECTEUR_4D & rkV, const double a)
1020 {
1021  double inv = 1/a;
1022  return OT_VECTEUR_4D(
1023  inv*rkV[0],inv*rkV[1],inv*rkV[2],inv*rkV[3]
1024  );
1025 }
1026 
1027 
1028 OT_VECTEUR_4D operator/ (const double a, const OT_VECTEUR_4D & rkV)
1029 {
1030  double inv = 1/a;
1031  return OT_VECTEUR_4D(
1032  inv*rkV[0],inv*rkV[1],inv*rkV[2],inv*rkV[3]
1033  );
1034 }
1035 
1037 {
1038  return a[0]*valeur[0]+a[1]*valeur[1]+a[2]*valeur[2]+a[3]*valeur[3];
1039 }
1040 
1041 
1043 {
1044  valeur[0] += rkV.valeur[0];
1045  valeur[1] += rkV.valeur[1];
1046  valeur[2] += rkV.valeur[2];
1047  valeur[3] += rkV.valeur[3];
1048  return *this;
1049 }
1050 
1052 {
1053  valeur[0] -= rkV.valeur[0];
1054  valeur[1] -= rkV.valeur[1];
1055  valeur[2] -= rkV.valeur[2];
1056  valeur[3] -= rkV.valeur[3];
1057  return *this;
1058 }
1060 {
1061  valeur[0] *= fScalar;
1062  valeur[1] *= fScalar;
1063  valeur[2] *= fScalar;
1064  valeur[3] *= fScalar;
1065  return *this;
1066 }
1068 {
1069  double a = 1/fScalar;
1070  valeur[0] *= a;
1071  valeur[1] *= a;
1072  valeur[2] *= a;
1073  valeur[3] *= a;
1074  return *this;
1075 }
1077 {
1078  valeur[0]=valeur[1]=valeur[2]=valeur[3]=a;
1079  return *this;
1080 }
1081 
1082 std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4D & __vec)
1083 {
1084  __os << "{ "<< __vec[0]<<", "<<__vec[1]<<", "<<__vec[2]<<", "<<__vec[3]<<"}, ";
1085  return __os;
1086 }
1087 #endif // ot_vecteur_4d
1088 
1089 
1090 
1091 
1092 
1093 
1095 {
1096  for (int i=0; i<3; i++)
1097  valeur[i]=v[i];
1098 }
1099 
1101 {
1102  valeur[0] = x;
1103  valeur[1] = y;
1104  valeur[2] = z;
1105 }
1106 
1108 {
1109  valeur[0]=xyz2[0]-xyz1[0];
1110  valeur[1]=xyz2[1]-xyz1[1];
1111  valeur[2]=xyz2[2]-xyz1[2];
1112 }
1113 
1115 {
1116  for (int i=0; i<3; i++)
1117  valeur[i]=v[i];
1118 }
1119 
1120 
1122 {
1123  return valeur[i];
1124 }
1125 
1127 {
1128  return valeur[i];
1129 }
1130 
1132 {
1133  return valeur[i];
1134 }
1135 
1137 {
1138  return valeur[i];
1139 }
1140 
1141 OT_VECTEUR_3DD::operator const double2* () const
1142 {
1143  return valeur;
1144 }
1145 
1146 OT_VECTEUR_3DD::operator double2* ()
1147 {
1148  return valeur;
1149 }
1150 
1152 {
1153  if (this==&v3d) return *this;
1154  valeur [0]=v3d.get_x();
1155  valeur [1]=v3d.get_y();
1156  valeur [2]=v3d.get_z();
1157  return *this;
1158 }
1160 {
1161  double2 nor= valeur [0]*valeur [0]+valeur [1]*valeur [1]+valeur [2]*valeur [2];
1162  nor=sqrt(nor);
1163  return nor;
1164 }
1166 {
1167  OT_VECTEUR_3DD nor;
1168  double2 zero=0.;
1169  double2 norme= this->norme() ;
1170  nor=(*this)*(1./norme);
1171  return nor;
1172 }
1174 {
1175  return sqrt(valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]);
1176 }
1177 
1179 {
1180  return (valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]);
1181 }
1182 
1184 {
1185  return valeur[0];
1186 }
1188 {
1189  return valeur[0];
1190 }
1192 {
1193  return valeur[1];
1194 }
1196 {
1197  return valeur[1];
1198 }
1200 {
1201  return valeur[2];
1202 }
1204 {
1205  return valeur[2];
1206 }
1208 {
1209  valeur[0] = x;
1210 }
1212 {
1213  valeur[1] = y;
1214 }
1216 {
1217  valeur[2] = z;
1218 }
1220 {
1221  return valeur;
1222 }
1223 
1225 {
1226  return OT_VECTEUR_3DD(
1227  a(0)+valeur[0],a(1)+valeur[1],a(2)+valeur[2]);
1228 }
1229 
1231 {
1232  return OT_VECTEUR_3DD(
1233  valeur[0]-a(0),valeur[1]-a(1),valeur[2]-a(2));
1234 }
1235 
1237 {
1238  return OT_VECTEUR_3DD(
1239  a*rkV[0],a*rkV[1],a*rkV[2]);
1240 }
1242 {
1243  return OT_VECTEUR_3DD(
1244  a*rkV[0],a*rkV[1],a*rkV[2]);
1245 }
1246 
1248 {
1249  double2 inv = 1/a;
1250  return OT_VECTEUR_3DD(
1251  inv*rkV[0],inv*rkV[1],inv*rkV[2]);
1252 }
1253 
1254 
1256 {
1257  double2 inv = 1/a;
1258  return OT_VECTEUR_3DD(
1259  inv*rkV[0],inv*rkV[1],inv*rkV[2]);
1260 }
1262 {
1263  OT_VECTEUR_3DD tmp;
1264  tmp[0]= valeur[1]*v2[2]-valeur[2]*v2[1];
1265  tmp[1]= valeur[2]*v2[0]-valeur[0]*v2[2];
1266  tmp[2]= valeur[0]*v2[1]-valeur[1]*v2[0];
1267  return tmp;
1268 }
1270 {
1271  return a[0]*valeur[0]+a[1]*valeur[1]+a[2]*valeur[2];
1272 }
1273 
1274 
1276 {
1277  valeur[0] = valeur[0] +rkV.valeur[0];
1278  valeur[1] = valeur[1] +rkV.valeur[1];
1279  valeur[2] = valeur[2] +rkV.valeur[2];
1280  return *this;
1281 }
1282 
1284 {
1285  valeur[0] = valeur[0] -rkV.valeur[0];
1286  valeur[1] = valeur[1] -rkV.valeur[1];
1287  valeur[2] = valeur[2] -rkV.valeur[2];
1288  return *this;
1289 }
1291 {
1292  valeur[0] =valeur[0] * fScalar;
1293  valeur[1] =valeur[1] * fScalar;
1294  valeur[2] =valeur[2] * fScalar;
1295  return *this;
1296 }
1298 {
1299  double2 a = 1/fScalar;
1300  valeur[0] =valeur[0] * a;
1301  valeur[1] =valeur[1] * a;
1302  valeur[2] =valeur[2] * a;
1303  return *this;
1304 }
1305 
1306 
1307 std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3DD & __vec)
1308 {
1309  __os << "[ "<<std::setw(20)<< __vec[0]<<std::setw(4)<<", "<<std::setw(20)<<__vec[1]<<", "<<std::setw(20)<<__vec[2]<<std::setw(4)<<", "<<std::setw(20)<<"] ";
1310  return __os;
1311 }
1312 
1314 {
1315  if (valeur[0]==mdd.valeur[0]&&valeur[1]==mdd.valeur[1] &&valeur[2]==mdd.valeur[2])
1316  return 1;
1317  else return 0;
1318 
1319 }
1320 
1322 {
1323  return compare_valeur(mdd);
1324 }
1325 
1326 
1327 
1328 
1329 
1330 
1331 
1332 
1333 
1334 
1336 {
1337  for (int i=0; i<4; i++)
1338  valeur[i]=v[i];
1339 }
1340 
1342 {
1343  valeur[0] = x;
1344  valeur[1] = y;
1345  valeur[2] = z;
1346  valeur[3] = w;
1347 }
1348 
1350 {
1351  for (int i=0; i<4; i++)
1352  valeur[i]=v[i];
1353 }
1354 
1355 
1357 {
1358  return valeur[i];
1359 }
1360 
1362 {
1363  return valeur[i];
1364 }
1365 
1367 {
1368  return valeur[i];
1369 }
1370 
1372 {
1373  return valeur[i];
1374 }
1375 
1376 OT_VECTEUR_4DD::operator const double2* () const
1377 {
1378  return valeur;
1379 }
1380 
1381 OT_VECTEUR_4DD::operator double2* ()
1382 {
1383  return valeur;
1384 }
1385 
1387 {
1388  if (this==&v4d) return *this;
1389  valeur [0]=v4d.get_x();
1390  valeur [1]=v4d.get_y();
1391  valeur [2]=v4d.get_z();
1392  valeur [3]=v4d.get_w();
1393  return *this;
1394 }
1396 {
1397  double2 nor= valeur [0]*valeur [0]+valeur [1]*valeur [1]+valeur [2]*valeur [2]+valeur [3]*valeur [3];
1398  nor=nor^0.5;
1399  return nor;
1400 }
1402 {
1403  OT_VECTEUR_4DD nor;
1404  double2 zero=0.;
1405  double2 norme= this->norme() ;
1406  assert(norme!=zero) ;
1407  nor=(*this)*(1./norme);
1408  return nor;
1409 }
1410 
1412 {
1413  double2 norme= valeur [0]*valeur [0]+valeur [1]*valeur [1]+valeur [2]*valeur [2];
1414  norme=norme^0.5;
1415  OT_VECTEUR_4DD nor;
1416  double2 zero=0.;
1417  assert(norme!=zero) ;
1418  nor.change_x(valeur[0]/norme);
1419  nor.change_y(valeur[1]/norme);
1420  nor.change_z(valeur[2]/norme);
1421  nor.change_w(valeur[3]);
1422  return nor;
1423 }
1425 {
1426  return valeur[0];
1427 }
1429 {
1430  return valeur[0];
1431 }
1433 {
1434  return valeur[1];
1435 }
1437 {
1438  return valeur[1];
1439 }
1441 {
1442  return valeur[2];
1443 }
1445 {
1446  return valeur[2];
1447 }
1449 {
1450  return valeur[3];
1451 }
1453 {
1454  return valeur[3];
1455 }
1457 {
1458  valeur[0] = x;
1459 }
1461 {
1462  valeur[1] = y;
1463 }
1465 {
1466  valeur[2] = z;
1467 }
1469 {
1470  valeur[3] = w;
1471 }
1473 {
1474  return valeur;
1475 }
1476 
1478 {
1479  return OT_VECTEUR_4DD(
1480  a(0)+valeur[0],a(1)+valeur[1],a(2)+valeur[2],a(3)+valeur[3]
1481  );
1482 }
1483 
1485 {
1486  return OT_VECTEUR_4DD(
1487  valeur[0]-a(0),valeur[1]-a(1),valeur[2]-a(2),valeur[3]-a(3)
1488  );
1489 }
1490 
1492 {
1493  return OT_VECTEUR_4DD(
1494  a*rkV[0],a*rkV[1],a*rkV[2],a*rkV[3]
1495  );
1496 }
1498 {
1499  return OT_VECTEUR_4DD(
1500  a*rkV[0],a*rkV[1],a*rkV[2],a*rkV[3]
1501  );
1502 }
1503 
1505 {
1506  double2 inv = 1/a;
1507  return OT_VECTEUR_4DD(
1508  inv*rkV[0],inv*rkV[1],inv*rkV[2],inv*rkV[3]
1509  );
1510 }
1511 
1512 
1514 {
1515  double2 inv = 1/a;
1516  return OT_VECTEUR_4DD(
1517  inv*rkV[0],inv*rkV[1],inv*rkV[2],inv*rkV[3]
1518  );
1519 }
1521 {
1522  OT_VECTEUR_4DD tmp;
1523  tmp[0]= valeur[1]*v2[2]-valeur[2]*v2[1];
1524  tmp[1]= valeur[2]*v2[0]-valeur[0]*v2[2];
1525  tmp[2]= valeur[0]*v2[1]-valeur[1]*v2[0];
1526  tmp[3]= 0;
1527  //tmp[3]= valeur[1]*v2[2]-valeur[2]*v2[1];
1528  return tmp;
1529 }
1531 {
1532  return a[0]*valeur[0]+a[1]*valeur[1]+a[2]*valeur[2]+a[3]*valeur[3];
1533 }
1534 
1535 
1537 {
1538  valeur[0] = valeur[0] +rkV.valeur[0];
1539  valeur[1] = valeur[1] +rkV.valeur[1];
1540  valeur[2] = valeur[2] +rkV.valeur[2];
1541  valeur[3] = valeur[3] +rkV.valeur[3];
1542  return *this;
1543 }
1544 
1546 {
1547  valeur[0] = valeur[0] -rkV.valeur[0];
1548  valeur[1] = valeur[1] -rkV.valeur[1];
1549  valeur[2] = valeur[2] -rkV.valeur[2];
1550  valeur[3] = valeur[3] -rkV.valeur[3];
1551  return *this;
1552 }
1554 {
1555  valeur[0] =valeur[0] * fScalar;
1556  valeur[1] =valeur[1] * fScalar;
1557  valeur[2] =valeur[2] * fScalar;
1558  valeur[3] =valeur[3] * fScalar;
1559  return *this;
1560 }
1562 {
1563  double2 a = 1/fScalar;
1564  valeur[0] =valeur[0] * a;
1565  valeur[1] =valeur[1] * a;
1566  valeur[2] =valeur[2] * a;
1567  valeur[3] =valeur[3] * a;
1568  return *this;
1569 }
1570 
1571 
1572 std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec)
1573 {
1574  __os << "[ "<<std::setw(20)<< __vec[0]<<std::setw(4)<<", "<<std::setw(20)<<__vec[1]<<", "<<std::setw(20)<<__vec[2]<<std::setw(4)<<", "<<std::setw(20)<<__vec[3]<<std::setw(4)<<"] ";
1575  return __os;
1576 }
1577 
1579 {
1580  if (valeur[0]==mdd.valeur[0]&&valeur[1]==mdd.valeur[1] &&valeur[2]==mdd.valeur[2]&&valeur[3]==mdd.valeur[3])
1581  return 1;
1582  else return 0;
1583 
1584 }
1585 
1587 {
1588  return compare_valeur(mdd);
1589 }
1590 
1591 
1592 
1594 {
1595 double2 ZERO(0.);
1596 if (valeur[0]==ZERO&&valeur[1]==ZERO &&valeur[2]==ZERO&&valeur[3]==ZERO)
1597  return true;
1598 return false;
1599 }
1600 
1602 {
1603 double2 ZERO(0.);
1604 if (valeur[0]==ZERO&&valeur[1]==ZERO &&valeur[2]==ZERO)
1605  return true;
1606 return false;
1607 }
1608 
1609 
1610 
1611 
1612 double OT_VECTEUR_4D::get_longueur(void) const
1613 {
1614  return sqrt(valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]+valeur[3]*valeur[3]);
1615 }
1616 
1618 {
1619  return (valeur[0]*valeur[0]+valeur[1]*valeur[1]+valeur[2]*valeur[2]+valeur[3]*valeur[3]);
1620 }
1621 
1622 
1623 
1624 
1625 
1626 
1627 
1628 
1629 int OPERATEUR::egal(double a,double b,double eps)
1630 {
1631  double res=fabs(a-b);
1632  if (res<eps) return(1);
1633  return(0);
1634 }
1635 
1636 int OPERATEUR::egal(double* xyz1, double* xyz2, double eps)
1637 {
1638  if(fabs(xyz1[0]-xyz2[0])<eps)
1639  if(fabs(xyz1[1]-xyz2[1])<eps)
1640  if(fabs(xyz1[2]-xyz2[2])<eps)
1641  return 1;
1642  return 0;
1643 }
1644 
1645 
1646 
1647 double OPERATEUR::qualite_triangle(double* noeud1,double* noeud2,double* noeud3)
1648 {
1649  OT_VECTEUR_3D vec12(noeud1,noeud2);
1650  OT_VECTEUR_3D vec13(noeud1,noeud3);
1651  OT_VECTEUR_3D vec23(noeud2,noeud3);
1652  double d12=vec12.get_longueur();
1653  double d13=vec13.get_longueur();
1654  double d23=vec23.get_longueur();
1655  double dmax=std::max(d12,d13);
1656  dmax=std::max(dmax,d23);
1657  double p=0.5*(d12+d13+d23);
1658  double crit=(p-d12)*(p-d13)*(p-d23)/p;
1659  if (crit<0) crit=0.;
1660  crit=sqrt(crit);
1661  crit=crit/dmax;
1662  crit=crit*3.4641101614;
1663  return crit;
1664 }
1665 
1666 void OPERATEUR::doubleto2int(double val,int& val1,int& val2)
1667 {
1668  int *p=(int*)(&(val));
1669  val1=(*p);
1670  val2=(*(p+1));
1671 }
1672 
1673 double OPERATEUR::qualite_tetra(double* noeud1,double* noeud2,double* noeud3,double *noeud4)
1674 {
1675  OT_VECTEUR_3D ab(noeud1,noeud2);
1676  OT_VECTEUR_3D ac(noeud1,noeud3);
1677  OT_VECTEUR_3D cb(noeud3,noeud2);
1678  OT_VECTEUR_3D db(noeud4,noeud2);
1679  OT_VECTEUR_3D da(noeud4,noeud1);
1680  OT_VECTEUR_3D dc(noeud4,noeud3);
1681  double dab=ab.get_longueur();
1682  double dac=ac.get_longueur();
1683  double dcb=cb.get_longueur();
1684  double ddb=db.get_longueur();
1685  double dda=da.get_longueur();
1686  double ddc=dc.get_longueur();
1687 
1688  double dmax=std::max(dab,dac);
1689  dmax=std::max(dmax,dcb);
1690  dmax=std::max(dmax,ddb);
1691  dmax=std::max(dmax,dda);
1692  dmax=std::max(dmax,ddc);
1693 
1694  OT_VECTEUR_3D pvec=ab&ac;
1695  double vol=pvec*da;
1696  if (vol>0.) return 0.;
1697  vol=fabs(vol);
1698  double som=pvec.get_longueur()/2.;
1699  pvec=ab&da;
1700  som=som+pvec.get_longueur()/2.;
1701  pvec=ac&dc;
1702  som=som+pvec.get_longueur()/2.;
1703  pvec=cb&db;
1704  som=som+pvec.get_longueur()/2.;
1705  double crit=vol/som/dmax/0.408249;
1706  return crit;
1707 }
1708 
1709 int OPERATEUR::estdansletetra(double *xyz1,double *xyz2,double *xyz3,double *xyz4,double x,double y, double z)
1710 {
1711 OT_VECTEUR_3D v1(xyz2[0]-xyz1[0],xyz2[1]-xyz1[1],xyz2[2]-xyz1[2]);
1712 OT_VECTEUR_3D v2(xyz3[0]-xyz1[0],xyz3[1]-xyz1[1],xyz3[2]-xyz1[2]);
1713 OT_VECTEUR_3D v3(xyz4[0]-xyz1[0],xyz4[1]-xyz1[1],xyz4[2]-xyz1[2]);
1714 OT_VECTEUR_3D v4(x-xyz1[0],y-xyz1[1],z-xyz1[2]);
1715 OT_MATRICE_3D mat(v1,v2,v3);
1716 OT_MATRICE_3D mat1(v4,v2,v3);
1717 OT_MATRICE_3D mat2(v1,v4,v3);
1718 OT_MATRICE_3D mat3(v1,v2,v4);
1719 double det=mat.get_determinant();
1720 double xsi=mat1.get_determinant()/det;
1721 double eta=mat2.get_determinant()/det;
1722 double dseta=mat3.get_determinant()/det;
1723 int reponse1=1;
1724 int reponse2=1;
1725 double eps=0.0000001;
1726 if (xsi<-eps) reponse1=0;
1727 if (eta<-eps) reponse1=0;
1728 if (dseta<-eps) reponse1=0;
1729 if (xsi+eta+dseta>1.+eps) reponse1=0;
1730 if (xsi<eps) reponse2=0;
1731 if (eta<eps) reponse2=0;
1732 if (dseta<eps) reponse2=0;
1733 if (xsi+eta+dseta>1.-eps) reponse2=0;
1734 int face1=0,face2=0,face3=0,face4=0;
1735 if ((reponse1==1) && (reponse2==0))
1736  {
1737  if (dseta<eps) face1=1;
1738  if (eta<eps) face2=1;
1739  if (xsi<eps) face3=1;
1740  if (xsi+eta+dseta>1.-eps) face4=1;
1741  }
1742 return reponse1+2*reponse2+4*face1+8*face2+16*face3+32*face4;
1743 }
1744 
1745 
1746 
1747 
1748 int OPERATEUR::projeteestdansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z)
1749 {
1750 double xx,yy,zz;
1751 projetedansletriangle(xyz1,xyz2,xyz3,x,y,z,xx,yy,zz);
1752 return estdansletriangle(xyz1,xyz2,xyz3,xx,yy,zz);
1753 }
1754 
1755 void OPERATEUR::projetedansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z,double &xx,double &yy,double &zz)
1756 {
1757 OT_VECTEUR_3D vec1(xyz1,xyz2);
1758 OT_VECTEUR_3D vec2(xyz1,xyz3);
1759 OT_VECTEUR_3D n=vec1&vec2;
1760 n.norme();
1761 double d=-(n.get_x()*xyz1[0]+n.get_y()*xyz1[1]+n.get_z()*xyz1[2]);
1762 double t=-(n.get_x()*x+n.get_y()*y+n.get_z()*z+d);
1763 xx=x+t*n.get_x();
1764 yy=y+t*n.get_y();
1765 zz=z+t*n.get_z();
1766 double eta,xsi;
1767 calculeparamEFdansletriangle(xyz1,xyz2,xyz3,xx,yy,zz,xsi,eta);
1768 if ((eta<0.) && (xsi<0.) ) {eta=0;xsi=0.;}
1769 if ((eta<0.) && (xsi>0.) && (xsi<1.) ) eta=0;
1770 if ((xsi<0.) && (eta>0.) && (eta<1.) ) xsi=0;
1771 if ((xsi>1.) && (eta<0.) ) {eta=0;xsi=1.;}
1772 if ((xsi<0.) && (eta>1.) ) {eta=1.;xsi=0.;}
1773 if ((eta>0.) && (xsi>0.) && (eta+xsi>1.))
1774  {
1775  double diff=eta+xsi-1.;
1776  eta=eta-diff/2.;
1777  xsi=xsi-diff/2.;
1778  if (eta<0.) {xsi=1.;eta=0.;}
1779  if (xsi<0.) {xsi=0.;eta=1.;}
1780  }
1781 
1782 xx=(1.-eta-xsi)*xyz1[0]+xsi*xyz2[0]+eta*xyz3[0];
1783 yy=(1.-eta-xsi)*xyz1[1]+xsi*xyz2[1]+eta*xyz3[1];
1784 zz=(1.-eta-xsi)*xyz1[2]+xsi*xyz2[2]+eta*xyz3[2];
1785 }
1786 
1787 
1788 void OPERATEUR::calculeparamEFdansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z,double &xsi,double &eta)
1789 {
1790 OT_VECTEUR_3D vec1(xyz1,xyz2);
1791 OT_VECTEUR_3D vec2(xyz1,xyz3);
1792 OT_VECTEUR_3D vec3=vec1&vec2;
1793 OT_VECTEUR_3D vecb(x-xyz1[0],y-xyz1[1],z-xyz1[2]);
1794 OT_MATRICE_3D m(vec1,vec2,vec3);
1795 OT_MATRICE_3D m1(vecb,vec2,vec3);
1796 OT_MATRICE_3D m2(vec1,vecb,vec3);
1797 double det=m.get_determinant();
1798 xsi=m1.get_determinant()/det;
1799 eta=m2.get_determinant()/det;
1800 }
1801 
1802 int OPERATEUR::estdansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z)
1803 {
1804 double eta,xsi;
1805 calculeparamEFdansletriangle(xyz1,xyz2,xyz3,x,y,z,xsi,eta);
1806 int reponse1=1;
1807 int reponse2=1;
1808 double eps=0.0000001;
1809 if (xsi<-eps) reponse1=0;
1810 if (eta<-eps) reponse1=0;
1811 if (xsi+eta>1.+eps) reponse1=0;
1812 if (xsi<eps) reponse2=0;
1813 if (eta<eps) reponse2=0;
1814 if (xsi+eta>1.-eps) reponse2=0;
1815 int arete1=0,arete2=0,arete3=0;
1816 if ((reponse1==1) && (reponse2==0))
1817  {
1818  if (eta<eps) arete1=1;
1819  if (xsi<eps) arete3=1;
1820  if (xsi+eta>1.-eps) arete2=1;
1821  }
1822 return reponse1+2*reponse2+4*arete1+8*arete2+16*arete3;
1823 }
1824 
1825 
1826 
1827 
1828 int OPERATEUR::compare_etat_tetra(int etat,int valeur)
1829 {
1830 int faceinte=etat&1;
1831 int inte=(etat&2)>>1;
1832 int face1=(etat&4)>>2;
1833 int face2=(etat&8)>>3;
1834 int face3=(etat&16)>>4;
1835 int face4=(etat&32)>>5;
1836 if ((faceinte==1) && (valeur==INTERIEUR)) return 1;
1837 if ((inte==1) && (valeur==INTERIEUR)) return 1;
1838 if (/*(face==0) && */(inte==1) && (valeur==STRICTINTERIEUR)) return 1;
1839 if ((faceinte==1) && (inte==0) && (valeur==SUR_FACE)) return 1;
1840 if ((face1==1) && (valeur==FACE1)) return 1;
1841 if ((face2==1) && (valeur==FACE2)) return 1;
1842 if ((face3==1) && (valeur==FACE3)) return 1;
1843 if ((face4==1) && (valeur==FACE4)) return 1;
1844 if ((face1==1) && (face2==1) && (valeur==ARETE1)) return 1;
1845 if ((face1==1) && (face3==1) && (valeur==ARETE2)) return 1;
1846 if ((face2==1) && (face3==1) && (valeur==ARETE3)) return 1;
1847 if ((face1==1) && (face4==1) && (valeur==ARETE4)) return 1;
1848 if ((face2==1) && (face4==1) && (valeur==ARETE5)) return 1;
1849 if ((face3==1) && (face4==1) && (valeur==ARETE6)) return 1;
1850 if ((face1==1) && (face2==1) && (face3==1) && (valeur==SOMMET1)) return 1;
1851 if ((face1==1) && (face2==1) && (face4==1) && (valeur==SOMMET2)) return 1;
1852 if ((face1==1) && (face3==1) && (face4==1) && (valeur==SOMMET3)) return 1;
1853 if ((face2==1) && (face3==1) && (face4==1) && (valeur==SOMMET4)) return 1;
1854 return 0;
1855 }
1856 
1857 int OPERATEUR::compare_etat_triangle(int etat,int valeur)
1858 {
1859 int areteinte=etat&1;
1860 int inte=(etat&2)>>1;
1861 int arete1=(etat&4)>>2;
1862 int arete2=(etat&8)>>3;
1863 int arete3=(etat&16)>>4;
1864 if ((areteinte==1) && (valeur==INTERIEUR)) return 1;
1865 if ((inte==1) && (valeur==INTERIEUR)) return 1;
1866 if ((inte==1) && (valeur==STRICTINTERIEUR)) return 1;
1867 if ((areteinte==1) && (inte==0) && (valeur==SUR_ARETE)) return 1;
1868 if ((arete1==1) && (valeur==ARETE1)) return 1;
1869 if ((arete2==1) && (valeur==ARETE2)) return 1;
1870 if ((arete3==1) && (valeur==ARETE3)) return 1;
1871 if ((arete1==1) && (arete2==1) && (valeur==SOMMET2)) return 1;
1872 if ((arete2==1) && (arete3==1) && (valeur==SOMMET3)) return 1;
1873 if ((arete3==1) && (arete1==1) && (valeur==SOMMET1)) return 1;
1874 return 0;
1875 }
1876 
1877 double OPERATEUR::taille_tetra(double* noeud1, double* noeud2, double* noeud3, double* noeud4)
1878 {
1879  OT_VECTEUR_3D ab(noeud1,noeud2);
1880  OT_VECTEUR_3D ac(noeud1,noeud3);
1881  OT_VECTEUR_3D cb(noeud3,noeud2);
1882  OT_VECTEUR_3D db(noeud4,noeud2);
1883  OT_VECTEUR_3D da(noeud4,noeud1);
1884  OT_VECTEUR_3D dc(noeud4,noeud3);
1885  double dab=ab.get_longueur();
1886  double dac=ac.get_longueur();
1887  double dcb=cb.get_longueur();
1888  double ddb=db.get_longueur();
1889  double dda=da.get_longueur();
1890  double ddc=dc.get_longueur();
1891  double dmax=std::max(dab,dac);
1892  dmax=std::max(dmax,dcb);
1893  dmax=std::max(dmax,ddb);
1894  dmax=std::max(dmax,dda);
1895  dmax=std::max(dmax,ddc);
1896  return dmax;
1897 }
1898 
1899 double OPERATEUR::taille_triangle(double* noeud1, double* noeud2, double* noeud3)
1900 {
1901  OT_VECTEUR_3D vec12(noeud1,noeud2);
1902  OT_VECTEUR_3D vec13(noeud1,noeud3);
1903  OT_VECTEUR_3D vec23(noeud2,noeud3);
1904  double d12=vec12.get_longueur();
1905  double d13=vec13.get_longueur();
1906  double d23=vec23.get_longueur();
1907  double dmax=std::max(d12,d13);
1908  dmax=std::max(dmax,d23);
1909  return dmax;
1910 }
1911 
1912 
1913 template <int N> DOUBLEN<N>::DOUBLEN()
1914 {
1915  tab[0]=-1;
1916 }
1917 
1918 template <int N> DOUBLEN<N>::DOUBLEN(DOUBLEN& mdd)
1919 {
1920  for (int i=0;i<N;i++)
1921  tab[i]=mdd.tab[i];
1922 }
1923 
1924 template <int N> DOUBLEN<N>::DOUBLEN(double *v)
1925 {
1926  for (int i=0;i<N;i++)
1927  tab[i]=v[i];
1928 }
1929 
1930 template <int N> DOUBLEN<N>::~DOUBLEN()
1931 {
1932 }
1933 
1934 template <int N> double DOUBLEN<N>::get_valeur(int num)
1935 {
1936  return tab[num];
1937 }
1938 
1939 template <int N> void DOUBLEN<N>::change_valeur(int num,double val)
1940 {
1941  tab[num]=val;
1942 }
1943 
1945 {
1946  for (int i=0;i<N;i++)
1947  tab[i]=mdd.tab[i];
1948  return *this;
1949 }
1950 
1951 template <int N> DOUBLEN<N> & DOUBLEN<N>::operator=(const DOUBLEN<N> & mdd)
1952 {
1953  for (int i=0;i<N;i++)
1954  tab[i]=mdd.tab[i];
1955  return *this;
1956 }
1957 
1958 
1959 
1960 template class DOUBLEN<1>;
1961 template class DOUBLEN<4>;
1962 template class DOUBLEN<10>;
1963 
1964 
OT_VECTEUR_3D::operator-=
OT_VECTEUR_3D & operator-=(const OT_VECTEUR_3D &rkV)
Definition: ot_mathematique.cpp:614
OT_VECTEUR_3DD::operator+
OT_VECTEUR_3DD operator+(const OT_VECTEUR_3DD &rkV)
Definition: ot_mathematique.cpp:1224
OT_VECTEUR_4D::get_w
virtual double get_w(void) const
Definition: ot_mathematique.cpp:963
OT_VECTEUR_4D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:939
OT_VECTEUR_4D::operator/=
OT_VECTEUR_4D & operator/=(double fScalar)
Definition: ot_mathematique.cpp:1067
OT_VECTEUR_4DD::vecteur_norme_3d
OT_VECTEUR_4DD vecteur_norme_3d()
Definition: ot_mathematique.cpp:1411
OT_VECTEUR_3D::change_z
virtual void change_z(double z)
Definition: ot_mathematique.cpp:444
OT_HISTOGRAMME::ajouter_valeur
void ajouter_valeur(double x, double val)
Definition: ot_mathematique.cpp:90
OT_VECTEUR_4DD::change_x
virtual void change_x(double2 x)
Definition: ot_mathematique.cpp:1456
OT_VECTEUR_4DD::valeur
double2 valeur[4]
Definition: ot_mathematique.h:345
operator-
OT_VECTEUR_3D operator-(const OT_VECTEUR_3D &mdd1)
Definition: ot_mathematique.cpp:583
OT_MATRICE_3D::get_determinant
double get_determinant()
Definition: ot_mathematique.cpp:735
OPERATEUR::FACE2
@ FACE2
Definition: ot_mathematique.h:435
OT_MATRICE_3D::change_vecteur3
void change_vecteur3(OT_VECTEUR_3D v)
Definition: ot_mathematique.cpp:810
OT_VECTEUR_4DD::change_y
virtual void change_y(double2 y)
Definition: ot_mathematique.cpp:1460
OT_VECTEUR_3DD::vecteur_norme
OT_VECTEUR_3DD vecteur_norme()
Definition: ot_mathematique.cpp:1165
OT_VECTEUR_3DD::norme
double2 norme()
Definition: ot_mathematique.cpp:1159
operator*
double operator*(const OT_VECTEUR_3D &mdd1, const OT_VECTEUR_3D &mdd2)
Definition: ot_mathematique.cpp:591
OT_QUATERNION::operator=
OT_QUATERNION & operator=(OT_QUATERNION &mdd)
Definition: ot_mathematique.cpp:371
OT_QUATERNION::OT_QUATERNION
OT_QUATERNION(void)
Definition: ot_mathematique.cpp:307
OT_VECTEUR_4DD::operator=
OT_VECTEUR_4DD & operator=(const OT_VECTEUR_4DD &)
Definition: ot_mathematique.cpp:1386
OT_HISTOGRAMME
Definition: ot_mathematique.h:34
OT_VECTEUR_3DD::operator-
OT_VECTEUR_3DD operator-(const OT_VECTEUR_3DD &rkV)
Definition: ot_mathematique.cpp:1230
OT_VECTEUR_4DD::OT_VECTEUR_4DD
OT_VECTEUR_4DD()
Definition: ot_mathematique.h:290
OT_VECTEUR_3DD::valeur
double2 valeur[3]
Definition: ot_mathematique.h:408
OT_VECTEUR_4DD::operator*=
OT_VECTEUR_4DD & operator*=(double2 fScalar)
Definition: ot_mathematique.cpp:1553
OT_VECTEUR_3DD::operator==
bool operator==(const OT_VECTEUR_3DD &mdd) const
Definition: ot_mathematique.cpp:1321
OPERATEUR::SUR_FACE
@ SUR_FACE
Definition: ot_mathematique.h:435
OT_MATRICE_3D::identite
void identite(void)
Definition: ot_mathematique.cpp:743
OT_HISTOGRAMME::get_nb_colonne
long get_nb_colonne(void)
Definition: ot_mathematique.cpp:200
OT_MATRICE_3D::vec
OT_VECTEUR_3D vec[3]
Definition: ot_mathematique.h:194
OT_VECTEUR_4DD::operator[]
double2 operator[](int i) const
Definition: ot_mathematique.cpp:1371
OT_MATRICE_3D::valeur
double valeur(int iLigne, int iCol) const
Definition: ot_mathematique.cpp:719
OT_VECTEUR_3DD::x
virtual double2 & x(void)
Definition: ot_mathematique.cpp:1187
OT_VECTEUR_3D::operator/=
OT_VECTEUR_3D & operator/=(double fScalar)
Definition: ot_mathematique.cpp:628
mat2
#define mat2(i, j)
OT_VECTEUR_3D::get_longueur2
virtual double get_longueur2(void) const
Definition: ot_mathematique.cpp:488
OT_MATRICE_3D::operator[]
OT_VECTEUR_3D & operator[](int i)
Definition: ot_mathematique.cpp:702
OT_QUATERNION::get_x
double get_x(void)
Definition: ot_mathematique.cpp:331
OT_VECTEUR_4DD::change_w
virtual void change_w(double2 w)
Definition: ot_mathematique.cpp:1468
a
#define a(i, j)
OPERATEUR::FACE3
@ FACE3
Definition: ot_mathematique.h:435
OPERATEUR::ARETE4
@ ARETE4
Definition: ot_mathematique.h:435
OPERATEUR::projeteestdansletriangle
static int projeteestdansletriangle(double *xyz1, double *xyz2, double *xyz3, double x, double y, double z)
Definition: ot_mathematique.cpp:1748
OT_QUATERNION::get_z
double get_z(void)
Definition: ot_mathematique.cpp:351
OT_VECTEUR_3D::compare_valeur
int compare_valeur(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:521
OT_HISTOGRAMME::m_map_colonne
std::map< long, double, std::less< long > > m_map_colonne
Definition: ot_mathematique.h:68
OT_VECTEUR_3D::unite
OT_VECTEUR_3D unite(int i)
Definition: ot_mathematique.cpp:513
OT_VECTEUR_3D::change_y
virtual void change_y(double y)
Definition: ot_mathematique.cpp:439
OT_VECTEUR_3DD::get_longueur2
virtual double2 get_longueur2(void)
Definition: ot_mathematique.cpp:1178
OT_VECTEUR_3D::operator+=
OT_VECTEUR_3D & operator+=(const OT_VECTEUR_3D &rkV)
Definition: ot_mathematique.cpp:607
DOUBLEN::tab
double tab[N]
Definition: ot_mathematique.h:470
OT_VECTEUR_3D::operator==
bool operator==(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:526
mat1
#define mat1(i, j)
OT_VECTEUR_4DD::get_w
virtual double2 get_w(void) const
Definition: ot_mathematique.cpp:1448
OPERATEUR::compare_etat_triangle
static int compare_etat_triangle(int etat, int valeur)
Definition: ot_mathematique.cpp:1857
OPERATEUR::calculeparamEFdansletriangle
static void calculeparamEFdansletriangle(double *xyz1, double *xyz2, double *xyz3, double x, double y, double z, double &xsi, double &eta)
Definition: ot_mathematique.cpp:1788
OPERATEUR::ARETE2
@ ARETE2
Definition: ot_mathematique.h:435
OPERATEUR::estdansletetra
static int estdansletetra(double *xyz1, double *xyz2, double *xyz3, double *xyz4, double x, double y, double z)
Definition: ot_mathematique.cpp:1709
operator<<
std::ostream & operator<<(std::ostream &__os, const OT_VECTEUR_3D &__vec)
Definition: ot_mathematique.cpp:556
OT_VECTEUR_3DD::get_longueur
virtual double2 get_longueur(void)
Definition: ot_mathematique.cpp:1173
OT_MATRICE_3D::get_vecteur1
OT_VECTEUR_3D & get_vecteur1(void)
Definition: ot_mathematique.cpp:814
OT_HISTOGRAMME::m_i_max
long m_i_max
Definition: ot_mathematique.h:66
OPERATEUR::ARETE1
@ ARETE1
Definition: ot_mathematique.h:435
OT_HISTOGRAMME::~OT_HISTOGRAMME
~OT_HISTOGRAMME(void)
Definition: ot_mathematique.cpp:75
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
OT_VECTEUR_4DD::w
virtual double2 & w(void)
Definition: ot_mathematique.cpp:1452
OT_VECTEUR_3DD::operator[]
double2 operator[](int i) const
Definition: ot_mathematique.cpp:1136
OPERATEUR::projetedansletriangle
static void projetedansletriangle(double *xyz1, double *xyz2, double *xyz3, double x, double y, double z, double &xx, double &yy, double &zz)
Definition: ot_mathematique.cpp:1755
OT_VECTEUR_3DD::operator*=
OT_VECTEUR_3DD & operator*=(double2 fScalar)
Definition: ot_mathematique.cpp:1290
OT_VECTEUR_3D::operator>=
bool operator>=(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:551
OT_HISTOGRAMME::get_valeur
int get_valeur(double x, double &val)
Definition: ot_mathematique.cpp:127
OT_VECTEUR_3D::OT_VECTEUR_3D
OT_VECTEUR_3D(void)
Definition: ot_mathematique.cpp:410
OT_VECTEUR_3DD::z
virtual double2 & z(void)
Definition: ot_mathematique.cpp:1203
OT_MATRICE_3D::operator()
double operator()(int iLigne, int iCol) const
Definition: ot_mathematique.cpp:727
OT_VECTEUR_4D::w
virtual double & w(void)
Definition: ot_mathematique.cpp:967
OT_VECTEUR_4DD::operator/=
OT_VECTEUR_4DD & operator/=(double2 fScalar)
Definition: ot_mathematique.cpp:1561
OPERATEUR::STRICTINTERIEUR
@ STRICTINTERIEUR
Definition: ot_mathematique.h:435
OT_VECTEUR_4D::change_z
virtual void change_z(double z)
Definition: ot_mathematique.cpp:979
OT_VECTEUR_4D::operator-
OT_VECTEUR_4D operator-(const OT_VECTEUR_4D &rkV)
Definition: ot_mathematique.cpp:999
OPERATEUR::compare_etat_tetra
static int compare_etat_tetra(int etat, int valeur)
Definition: ot_mathematique.cpp:1828
double2
Definition: ot_doubleprecision.h:29
OT_VECTEUR_4DD::compare_valeur
int compare_valeur(const OT_VECTEUR_4DD &mdd) const
Definition: ot_mathematique.cpp:1578
OT_HISTOGRAMME::enregistrer_bin
void enregistrer_bin(std::ofstream &ofstr)
Definition: ot_mathematique.cpp:236
operator&
OT_VECTEUR_3D operator&(const OT_VECTEUR_3D &mdd1, const OT_VECTEUR_3D &mdd2)
Definition: ot_mathematique.cpp:647
OT_VECTEUR_4D::x
virtual double & x(void)
Definition: ot_mathematique.cpp:943
OT_QUATERNION::change_y
void change_y(double y)
Definition: ot_mathematique.cpp:346
OT_VECTEUR_4DD::operator^
OT_VECTEUR_4DD operator^(const OT_VECTEUR_4DD &v2)
Definition: ot_mathematique.cpp:1520
OT_QUATERNION::get_w
double get_w(void)
Definition: ot_mathematique.cpp:361
OT_VECTEUR_3D::operator[]
double operator[](int i) const
Definition: ot_mathematique.cpp:464
OT_VECTEUR_4D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:1612
OT_VECTEUR_4D::change_y
virtual void change_y(double y)
Definition: ot_mathematique.cpp:975
OT_VECTEUR_4DD::get_y
virtual double2 get_y(void) const
Definition: ot_mathematique.cpp:1432
OPERATEUR::ARETE6
@ ARETE6
Definition: ot_mathematique.h:435
OT_VECTEUR_3DD::get_z
virtual double2 get_z(void) const
Definition: ot_mathematique.cpp:1199
OT_VECTEUR_4DD::get_z
virtual double2 get_z(void) const
Definition: ot_mathematique.cpp:1440
OT_VECTEUR_4DD::y
virtual double2 & y(void)
Definition: ot_mathematique.cpp:1436
OT_VECTEUR_4DD::est_nul
bool est_nul(void)
Definition: ot_mathematique.cpp:1593
OT_VECTEUR_4D::z
virtual double & z(void)
Definition: ot_mathematique.cpp:959
OT_HISTOGRAMME::m_init
bool m_init
Definition: ot_mathematique.h:64
OT_VECTEUR_3DD::get_x
virtual double2 get_x(void) const
Definition: ot_mathematique.cpp:1183
OT_VECTEUR_3DD
Definition: ot_mathematique.h:350
OPERATEUR::egal
static int egal(double a, double b, double eps)
Definition: ot_mathematique.cpp:1629
OT_VECTEUR_4D::operator*=
OT_VECTEUR_4D & operator*=(double fScalar)
Definition: ot_mathematique.cpp:1059
OT_MATRICE_3D
Definition: ot_mathematique.h:160
OT_VECTEUR_3DD::y
virtual double2 & y(void)
Definition: ot_mathematique.cpp:1195
OT_VECTEUR_3D::get_xyz
virtual double * get_xyz(void)
Definition: ot_mathematique.cpp:449
OT_VECTEUR_3D::operator<=
bool operator<=(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:541
OT_VECTEUR_4DD::operator==
bool operator==(const OT_VECTEUR_4DD &mdd) const
Definition: ot_mathematique.cpp:1586
OT_QUATERNION::change_z
void change_z(double z)
Definition: ot_mathematique.cpp:356
OT_QUATERNION::change_w
void change_w(double w)
Definition: ot_mathematique.cpp:366
OT_QUATERNION::get_y
double get_y(void)
Definition: ot_mathematique.cpp:341
OT_MATRICE_3D::get_vecteur3
OT_VECTEUR_3D & get_vecteur3(void)
Definition: ot_mathematique.cpp:822
OT_HISTOGRAMME::exporter
void exporter(std::ofstream &ofstrm)
Definition: ot_mathematique.cpp:291
OT_VECTEUR_4D::operator+
OT_VECTEUR_4D operator+(const OT_VECTEUR_4D &rkV)
Definition: ot_mathematique.cpp:992
OT_VECTEUR_4DD::operator-=
OT_VECTEUR_4DD & operator-=(const OT_VECTEUR_4DD &rkV)
Definition: ot_mathematique.cpp:1545
OT_QUATERNION
Definition: ot_mathematique.h:71
OT_MATRICE_3D::change_vecteur2
void change_vecteur2(OT_VECTEUR_3D v)
Definition: ot_mathematique.cpp:806
OT_VECTEUR_3D::operator>
bool operator>(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:546
OT_HISTOGRAMME::OT_HISTOGRAMME
OT_HISTOGRAMME(void)
Definition: ot_mathematique.cpp:33
OT_VECTEUR_4D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:947
OT_VECTEUR_4D::operator*
double operator*(const OT_VECTEUR_4D &a)
Definition: ot_mathematique.cpp:1036
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
OT_HISTOGRAMME::ouvrir_txt
void ouvrir_txt(char *nom_fichier)
Definition: ot_mathematique.cpp:272
OT_VECTEUR_4D::get_xyzw
virtual double * get_xyzw(void)
Definition: ot_mathematique.cpp:987
OT_VECTEUR_4DD::get_x
virtual double2 get_x(void) const
Definition: ot_mathematique.cpp:1424
OT_QUATERNION::valeur
double valeur[4]
Definition: ot_mathematique.h:89
OT_VECTEUR_4D::change_x
virtual void change_x(double x)
Definition: ot_mathematique.cpp:971
OT_MATRICE_3D::transpose
OT_MATRICE_3D transpose() const
Definition: ot_mathematique.cpp:757
DOUBLEN::~DOUBLEN
~DOUBLEN()
Definition: ot_mathematique.cpp:1930
DOUBLEN::operator=
DOUBLEN< N > & operator=(DOUBLEN< N > &mdd)
Definition: ot_mathematique.cpp:1944
OT_HISTOGRAMME::operator=
OT_HISTOGRAMME & operator=(OT_HISTOGRAMME &mdd)
Definition: ot_mathematique.cpp:215
ot_mathematique.h
OT_VECTEUR_3DD::operator-=
OT_VECTEUR_3DD & operator-=(const OT_VECTEUR_3DD &rkV)
Definition: ot_mathematique.cpp:1283
OPERATEUR::qualite_tetra
static double qualite_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
Definition: ot_mathematique.cpp:1673
OT_VECTEUR_3DD::operator=
OT_VECTEUR_3DD & operator=(const OT_VECTEUR_3DD &)
Definition: ot_mathematique.cpp:1151
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
OT_VECTEUR_4D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:955
OPERATEUR::SUR_ARETE
@ SUR_ARETE
Definition: ot_mathematique.h:435
OPERATEUR::SOMMET1
@ SOMMET1
Definition: ot_mathematique.h:435
OPERATEUR::INTERIEUR
@ INTERIEUR
Definition: ot_mathematique.h:435
DOUBLEN::DOUBLEN
DOUBLEN()
Definition: ot_mathematique.cpp:1913
OT_VECTEUR_3DD::compare_valeur
int compare_valeur(const OT_VECTEUR_3DD &mdd) const
Definition: ot_mathematique.cpp:1313
OT_VECTEUR_4DD::operator-
OT_VECTEUR_4DD operator-(const OT_VECTEUR_4DD &rkV)
Definition: ot_mathematique.cpp:1484
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
OT_VECTEUR_4D
Definition: ot_mathematique.h:215
OPERATEUR::taille_triangle
static double taille_triangle(double *noeud1, double *noeud2, double *noeud3)
Definition: ot_mathematique.cpp:1899
OPERATEUR::SOMMET2
@ SOMMET2
Definition: ot_mathematique.h:435
DOUBLEN::get_valeur
double get_valeur(int num)
Definition: ot_mathematique.cpp:1934
OT_VECTEUR_4DD::get_xyzw
virtual double2 * get_xyzw(void)
Definition: ot_mathematique.cpp:1472
OT_VECTEUR_3D::operator<
bool operator<(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:536
OT_VECTEUR_4DD::change_z
virtual void change_z(double2 z)
Definition: ot_mathematique.cpp:1464
OPERATEUR::FACE4
@ FACE4
Definition: ot_mathematique.h:435
OPERATEUR::doubleto2int
static void doubleto2int(double val, int &val1, int &val2)
Definition: ot_mathematique.cpp:1666
OT_HISTOGRAMME::m_i_min
long m_i_min
Definition: ot_mathematique.h:65
OT_VECTEUR_3DD::get_xyz
virtual double2 * get_xyz(void)
Definition: ot_mathematique.cpp:1219
OT_VECTEUR_4DD::operator*
double2 operator*(const OT_VECTEUR_4DD &a)
Definition: ot_mathematique.cpp:1530
OT_VECTEUR_4DD::operator+
OT_VECTEUR_4DD operator+(const OT_VECTEUR_4DD &rkV)
Definition: ot_mathematique.cpp:1477
OT_HISTOGRAMME::get_premiere_valeur
int get_premiere_valeur(std::map< long, double >::iterator &it, double &valeur)
Definition: ot_mathematique.cpp:146
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
operator/
OT_VECTEUR_3D operator/(const OT_VECTEUR_3D &mdd1, double diviseur)
Definition: ot_mathematique.cpp:562
OT_VECTEUR_4D::operator-=
OT_VECTEUR_4D & operator-=(const OT_VECTEUR_4D &rkV)
Definition: ot_mathematique.cpp:1051
OT_VECTEUR_3D::operator*=
OT_VECTEUR_3D & operator*=(double fScalar)
Definition: ot_mathematique.cpp:621
OPERATEUR::SOMMET4
@ SOMMET4
Definition: ot_mathematique.h:435
OT_HISTOGRAMME::ouvrir_bin
void ouvrir_bin(std::ifstream &ifstr)
Definition: ot_mathematique.cpp:254
OT_VECTEUR_3DD::operator*
double2 operator*(const OT_VECTEUR_3DD &a)
Definition: ot_mathematique.cpp:1269
OT_VECTEUR_3DD::get_y
virtual double2 get_y(void) const
Definition: ot_mathematique.cpp:1191
OPERATEUR::SOMMET3
@ SOMMET3
Definition: ot_mathematique.h:435
OT_MATRICE_3D::get_vecteur2
OT_VECTEUR_3D & get_vecteur2(void)
Definition: ot_mathematique.cpp:818
OT_MATRICE_3D::OT_MATRICE_3D
OT_MATRICE_3D(void)
Definition: ot_mathematique.cpp:676
DOUBLEN::change_valeur
void change_valeur(int num, double val)
Definition: ot_mathematique.cpp:1939
OT_HISTOGRAMME::m_largeur_colonne
double m_largeur_colonne
Definition: ot_mathematique.h:67
OT_VECTEUR_3D::valeur
double valeur[3]
Definition: ot_mathematique.h:157
OT_VECTEUR_3DD::OT_VECTEUR_3DD
OT_VECTEUR_3DD()
Definition: ot_mathematique.h:357
OPERATEUR::qualite_triangle
static double qualite_triangle(double *noeud1, double *noeud2, double *noeud3)
Definition: ot_mathematique.cpp:1647
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
OT_VECTEUR_3D::diff
virtual double diff(void)
Definition: ot_mathematique.cpp:656
OPERATEUR::estdansletriangle
static int estdansletriangle(double *xyz1, double *xyz2, double *xyz3, double x, double y, double z)
Definition: ot_mathematique.cpp:1802
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
OT_VECTEUR_4DD::operator+=
OT_VECTEUR_4DD & operator+=(const OT_VECTEUR_4DD &rkV)
Definition: ot_mathematique.cpp:1536
OT_VECTEUR_3DD::change_z
virtual void change_z(double2 z)
Definition: ot_mathematique.cpp:1215
OT_QUATERNION::change_x
void change_x(double x)
Definition: ot_mathematique.cpp:336
OPERATEUR::ARETE5
@ ARETE5
Definition: ot_mathematique.h:435
OPERATEUR::ARETE3
@ ARETE3
Definition: ot_mathematique.h:435
res
#define res(i, j)
OT_VECTEUR_3D::gram_shmidt
OT_VECTEUR_3D gram_shmidt(const OT_VECTEUR_3D &vint)
Definition: ot_mathematique.cpp:505
OT_VECTEUR_3D::operator()
double operator()(int i) const
Definition: ot_mathematique.cpp:474
OT_VECTEUR_4D::get_longueur2
virtual double get_longueur2(void) const
Definition: ot_mathematique.cpp:1617
OT_VECTEUR_3DD::change_x
virtual void change_x(double2 x)
Definition: ot_mathematique.cpp:1207
OT_VECTEUR_4D::operator[]
double operator[](int i) const
Definition: ot_mathematique.cpp:924
OT_VECTEUR_4DD::norme
double2 norme()
Definition: ot_mathematique.cpp:1395
OT_MATRICE_3D::inverse
OT_MATRICE_3D inverse() const
Definition: ot_mathematique.cpp:767
OT_VECTEUR_3DD::operator/=
OT_VECTEUR_3DD & operator/=(double2 fScalar)
Definition: ot_mathematique.cpp:1297
OT_VECTEUR_3DD::operator&
OT_VECTEUR_3DD operator&(const OT_VECTEUR_3DD &v2)
Definition: ot_mathematique.cpp:1261
OT_VECTEUR_4D::change_w
virtual void change_w(double w)
Definition: ot_mathematique.cpp:983
DOUBLEN
Definition: ot_mathematique.h:457
OT_VECTEUR_4DD
Definition: ot_mathematique.h:284
OT_HISTOGRAMME::get_largeur_colonne
double get_largeur_colonne(void)
Definition: ot_mathematique.cpp:85
OT_VECTEUR_4D::operator()
double operator()(int i) const
Definition: ot_mathematique.cpp:914
OT_VECTEUR_3DD::operator+=
OT_VECTEUR_3DD & operator+=(const OT_VECTEUR_3DD &rkV)
Definition: ot_mathematique.cpp:1275
OT_HISTOGRAMME::fixe_largeur_colonne
void fixe_largeur_colonne(double largeur_colonne)
Definition: ot_mathematique.cpp:80
OT_HISTOGRAMME::get_suivante_valeur
int get_suivante_valeur(std::map< long, double >::iterator &it, double &valeur)
Definition: ot_mathematique.cpp:154
OT_VECTEUR_3D::operator!=
bool operator!=(const OT_VECTEUR_3D &mdd) const
Definition: ot_mathematique.cpp:531
OT_VECTEUR_4D::valeur
double valeur[4]
Definition: ot_mathematique.h:272
OT_VECTEUR_4D::OT_VECTEUR_4D
OT_VECTEUR_4D(void)
Definition: ot_mathematique.h:222
OT_VECTEUR_3DD::change_y
virtual void change_y(double2 y)
Definition: ot_mathematique.cpp:1211
OT_VECTEUR_4DD::est_nul_3d
bool est_nul_3d(void)
Definition: ot_mathematique.cpp:1601
OT_VECTEUR_4DD::x
virtual double2 & x(void)
Definition: ot_mathematique.cpp:1428
OT_VECTEUR_4DD::vecteur_norme
OT_VECTEUR_4DD vecteur_norme()
Definition: ot_mathematique.cpp:1401
OT_VECTEUR_4DD::operator()
double2 operator()(int i) const
Definition: ot_mathematique.cpp:1361
OT_MATRICE_3D::change_vecteur1
void change_vecteur1(OT_VECTEUR_3D v)
Definition: ot_mathematique.cpp:802
OT_VECTEUR_3D::change_x
virtual void change_x(double x)
Definition: ot_mathematique.cpp:434
OT_HISTOGRAMME::get_x_min
double get_x_min(void)
Definition: ot_mathematique.cpp:205
OT_VECTEUR_3DD::operator()
double2 operator()(int i) const
Definition: ot_mathematique.cpp:1126
OT_VECTEUR_4DD::z
virtual double2 & z(void)
Definition: ot_mathematique.cpp:1444
OPERATEUR::taille_tetra
static double taille_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
Definition: ot_mathematique.cpp:1877
OT_HISTOGRAMME::get_x_max
double get_x_max(void)
Definition: ot_mathematique.cpp:210
OPERATEUR::FACE1
@ FACE1
Definition: ot_mathematique.h:435
OT_VECTEUR_4D::y
virtual double & y(void)
Definition: ot_mathematique.cpp:951
OT_VECTEUR_4D::operator+=
OT_VECTEUR_4D & operator+=(const OT_VECTEUR_4D &rkV)
Definition: ot_mathematique.cpp:1042
mat
#define mat(i, j)
m
#define m(i, j)
operator+
OT_MATRICE_3D operator+(const OT_MATRICE_3D &mdd1, const OT_MATRICE_3D &mdd2)
Definition: ot_mathematique.cpp:829
OT_VECTEUR_4D::operator=
OT_VECTEUR_4D & operator=(double)
Definition: ot_mathematique.cpp:1076