MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fct_taille_arete.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 //####// fct_taille_arete.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "fct_taille_arete.h"
26 #include <math.h>
27 
28 
29 
30 
31 FCT_TAILLE_ARETE::FCT_TAILLE_ARETE(double eps,double dist,MG_ARETE* mgarete):FCT_TAILLE_METRIQUE(),epsilon(eps),distance_maximale(dist),arete(mgarete)
32 {
33 
34  t1=arete->get_tmin();
35  t2=arete->get_tmax();
38  for (int i=0;i<arete->get_cosommet1()->get_sommet()->get_nb_mg_cosommet();i++)
39  {
41  double longueur=mgarete->get_longueur(mgarete->get_tmin(),mgarete->get_tmax());
42  dens1=std::min(dens1,longueur);
43  }
44  for (int j=0;j<arete->get_cosommet2()->get_sommet()->get_nb_mg_cosommet();j++)
45  {
47  double longueur=mgarete->get_longueur(mgarete->get_tmin(),mgarete->get_tmax());
48  dens2=std::min(dens2,longueur);
49  }
50 }
51 
52 
54 {
55 }
56 
57 void FCT_TAILLE_ARETE::evaluer(double *param,double *resultat)
58 {
59 
60 
61 
62  double t=*param;
63  double tm=t1*dens1+t2*dens2;
64  tm=tm/(dens1+dens2);
65  double facteur2=(t-t1)*(t-t2)/(tm-t1)/(tm-t2)*distance_maximale+(t-tm)*(t-t2)/(t1-tm)/(t1-t2)*dens1+(t-t1)*(t-tm)/(t2-t1)/(t2-tm)*dens2;
66  facteur2=1/facteur2/facteur2;
67 
68  double M=arete->get_M(*param);
69  int nb_face=arete->get_nb_mg_coarete();
70  double xyz[3];
71  arete->evaluer(t,xyz);
72  for (int j=0;j<nb_face;j++)
73  {
75  double uv[2];
76  face->inverser(uv,xyz);
77  double cmin,cmax;
78  face->get_courbure(uv,cmax,cmin);
79  cmax=fabs(cmax);
80  if (cmax>M) M=cmax;
81  }
82  double facteur1=M/8./epsilon;
83  double valeur=std::max(facteur1,facteur2);
84  resultat[0]=valeur;
85  resultat[1]=0.;
86  resultat[2]=0.;
87  resultat[3]=0.;
88  resultat[4]=valeur;
89  resultat[5]=0.;
90  resultat[6]=0.;
91  resultat[7]=0.;
92  resultat[8]=valeur;
93 }
94 
95 
96 void FCT_TAILLE_ARETE::deriver(double *param,double *resultat,int num_param)
97 {
98  double t1=param[0];
99  double t2=param[0]+1e-6;
100  double coo1[9],coo2[9];
101  evaluer(&t1,coo1);
102  evaluer(&t2,coo2);
103  resultat[0]=(coo2[0]-coo1[0])/1e-6;
104  resultat[1]=(coo2[1]-coo1[1])/1e-6;
105  resultat[2]=(coo2[2]-coo1[2])/1e-6;
106  resultat[3]=(coo2[3]-coo1[3])/1e-6;
107  resultat[4]=(coo2[4]-coo1[4])/1e-6;
108  resultat[5]=(coo2[5]-coo1[5])/1e-6;
109  resultat[6]=(coo2[6]-coo1[6])/1e-6;
110  resultat[7]=(coo2[7]-coo1[7])/1e-6;
111  resultat[8]=(coo2[8]-coo1[8])/1e-6;
112 }
113 
114 void FCT_TAILLE_ARETE::evaluer_decompose(double *metrique_depart,double *metrique_decompose)
115 {
116  metrique_decompose[0]=metrique_depart[0];
117  arete->deriver(metrique_depart[1],metrique_decompose+1);
118 }
119 
121 {
122  return 1;
123 }
124 
125 
127 {
128  return distance_maximale;
129 }
130 
MG_SOMMET::get_mg_cosommet
virtual MG_COSOMMET * get_mg_cosommet(int num)
Definition: mg_sommet.cpp:88
FCT_TAILLE_ARETE::valide_parametre
virtual int valide_parametre(double *param)
Definition: fct_taille_arete.cpp:120
MG_ARETE::get_cosommet2
virtual class MG_COSOMMET * get_cosommet2(void)
Definition: mg_arete.cpp:85
gestionversion.h
FCT_TAILLE_ARETE::arete
MG_ARETE * arete
Definition: fct_taille_arete.h:47
MG_ARETE::evaluer
virtual void evaluer(double t, double *xyz)
Definition: mg_arete.cpp:143
FCT_TAILLE_ARETE::t1
double t1
Definition: fct_taille_arete.h:51
FCT_TAILLE_ARETE::distance_maximale
double distance_maximale
Definition: fct_taille_arete.h:46
robustPredicates::epsilon
static REAL epsilon
Definition: robustpredicates.cc:371
FCT_TAILLE_ARETE::dens1
double dens1
Definition: fct_taille_arete.h:53
MG_COARETE::get_boucle
virtual MG_BOUCLE * get_boucle(void)
Definition: mg_coarete.cpp:53
FCT_TAILLE_ARETE::t2
double t2
Definition: fct_taille_arete.h:52
MG_ARETE::get_tmin
virtual double get_tmin(void)
Definition: mg_arete.cpp:179
MG_FACE::inverser
virtual void inverser(double *uv, double *xyz, double precision=1e-6)
Definition: mg_face.cpp:228
MG_ARETE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_arete.cpp:106
FCT_TAILLE_ARETE::evaluer_decompose
virtual void evaluer_decompose(double *metrique_depart, double *metrique_decompose)
Definition: fct_taille_arete.cpp:114
FCT_TAILLE_ARETE::~FCT_TAILLE_ARETE
~FCT_TAILLE_ARETE()
Definition: fct_taille_arete.cpp:53
FCT_TAILLE_ARETE::dens2
double dens2
Definition: fct_taille_arete.h:54
MG_COSOMMET::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_cosommet.cpp:88
FCT_TAILLE_ARETE::FCT_TAILLE_ARETE
FCT_TAILLE_ARETE(double eps, double dist, MG_ARETE *mgarete)
Definition: fct_taille_arete.cpp:31
MG_BOUCLE::get_mg_face
virtual MG_FACE * get_mg_face(void)
Definition: mg_boucle.cpp:102
FCT_TAILLE_ARETE::evaluer
virtual void evaluer(double *param, double *resultat)
Definition: fct_taille_arete.cpp:57
MG_COSOMMET::get_sommet
virtual MG_SOMMET * get_sommet(void)
Definition: mg_cosommet.cpp:83
MG_ARETE::get_M
virtual double get_M(double t)
Definition: mg_arete.cpp:205
FCT_TAILLE_ARETE::epsilon
double epsilon
Definition: fct_taille_arete.h:45
MG_FACE::get_courbure
virtual void get_courbure(double *uv, double &cmax, double &cmin)
Definition: mg_face.cpp:313
MG_ARETE::deriver
virtual void deriver(double t, double *xyz)
Definition: mg_arete.cpp:149
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
FCT_TAILLE_ARETE::deriver
virtual void deriver(double *param, double *resultat, int num_param=0)
Definition: fct_taille_arete.cpp:96
MG_ARETE::get_cosommet1
virtual class MG_COSOMMET * get_cosommet1(void)
Definition: mg_arete.cpp:81
MG_ARETE::get_longueur
virtual double get_longueur(double t1, double t2, double precis=1e-6)
Definition: mg_arete.cpp:193
FCT_TAILLE_METRIQUE
Definition: fct_taille_metrique.h:29
FCT_TAILLE_ARETE::get_valeur_maximale
virtual double get_valeur_maximale(int num)
Definition: fct_taille_arete.cpp:126
fct_taille_arete.h
MG_ARETE::get_tmax
virtual double get_tmax(void)
Definition: mg_arete.cpp:184
MG_ARETE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_arete.cpp:228