MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
tpl_fonctions_generiques.h
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 //####// tpl_fonctions_generiques.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef _TPL_FONCTIONS_GENERIQUES_
23 #define _TPL_FONCTIONS_GENERIQUES_
24 
25 #include <math.h>
26 
27 template<class X> double get_angle_par_noeud(X noeud1,X noeud2,X noeud3,X noeud4,X noeud5,X noeud6)
28  {
29  X noeuda=NULL;
30  X noeudb=NULL;
31  X noeudc=NULL;
32  X noeudd=NULL;
33 
34 
35  if (!(noeud1==noeud4))
36  if (!(noeud1==noeud5))
37  if (!(noeud1==noeud6))
38  {
39  noeuda=noeud1;
40  noeudb=noeud2;
41  noeudc=noeud3;
42  }
43  if (!(noeud2==noeud4))
44  if (!(noeud2==noeud5))
45  if (!(noeud2==noeud6))
46  {
47  noeuda=noeud2;
48  noeudb=noeud1;
49  noeudc=noeud3;
50  }
51  if (!(noeud3==noeud4))
52  if (!(noeud3==noeud5))
53  if (!(noeud3==noeud6))
54  {
55  noeuda=noeud3;
56  noeudb=noeud1;
57  noeudc=noeud2;
58  }
59  if (noeuda==NULL) return 2*M_PI;
60  if (!(noeud4==noeudb))
61  if (!(noeud4==noeudc)) noeudd=noeud4;
62  if (!(noeud5==noeudb))
63  if (!(noeud5==noeudc)) noeudd=noeud5;
64  if (!(noeud6==noeudb))
65  if (!(noeud6==noeudc)) noeudd=noeud6;
66 
67  OT_VECTEUR_3D milieu(0.5*(noeudb->get_x()+noeudc->get_x()),0.5*(noeudb->get_y()+noeudc->get_y()),0.5*(noeudb->get_z()+noeudc->get_z()));
68  OT_VECTEUR_3D bc(noeudc->get_x()-noeudb->get_x(),noeudc->get_y()-noeudb->get_y(),noeudc->get_z()-noeudb->get_z());
69  bc.norme();
70  double xyz[3];
71  xyz[0]=noeuda->get_x();
72  xyz[1]=noeuda->get_y();
73  xyz[2]=noeuda->get_z();
74  OT_VECTEUR_3D n1(xyz,milieu.get_xyz());
75  n1.norme();
76  OT_VECTEUR_3D n=bc&n1;
77  n1=n&bc;
78  n1.norme();
79  xyz[0]=noeudd->get_x();
80  xyz[1]=noeudd->get_y();
81  xyz[2]=noeudd->get_z();
82  OT_VECTEUR_3D n2(xyz,milieu.get_xyz());
83  n2.norme();
84  n=bc&n2;
85  n2=n&bc;
86  n2.norme();
87 
88  double ps=n1*n2;
89  if (ps>1.) ps=1.;
90  if (ps<-1.) ps=-1.;
91  double angle=acos(ps);
92  OT_VECTEUR_3D n1n2(noeud2->get_x()-noeud1->get_x(),noeud2->get_y()-noeud1->get_y(),noeud2->get_z()-noeud1->get_z());
93  OT_VECTEUR_3D n1n3(noeud3->get_x()-noeud1->get_x(),noeud3->get_y()-noeud1->get_y(),noeud3->get_z()-noeud1->get_z());
94  OT_VECTEUR_3D nbnd(noeudd->get_x()-noeudb->get_x(),noeudd->get_y()-noeudb->get_y(),noeudd->get_z()-noeudb->get_z());
95  n=n1n2&n1n3;
96  n.norme();
97  nbnd.norme();
98 
99  ps=n*nbnd;
100  if (ps<-0.0001) angle=2*M_PI-angle;
101  return angle;
102 };
103 
104 
105 
106 
107 
108 #endif
get_angle_par_noeud
double get_angle_par_noeud(X noeud1, X noeud2, X noeud3, X noeud4, X noeud5, X noeud6)
Definition: tpl_fonctions_generiques.h:27
OT_VECTEUR_3D::get_xyz
virtual double * get_xyz(void)
Definition: ot_mathematique.cpp:449
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
acos
double2 acos(double2 &val)
Definition: ot_doubleprecision.cpp:224
OT_VECTEUR_3D
Definition: ot_mathematique.h:94