ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/dly_segment.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (10 months, 4 weeks ago) by francois
File size: 4875 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
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     //####// dly_segment.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 285
23    
24     #include "gestionversion.h"
25    
26 francois 313 #include <stdlib.h>
27 francois 285 #include "dly_noeud.h"
28     #include "dly_segment.h"
29     #include "dly_tetra.h"
30     #include "ot_mathematique.h"
31     #include "fct_taille.h"
32     #include <math.h>
33    
34    
35 francois 532
36 francois 285 DLY_SEGMENT::DLY_SEGMENT(class DLY_NOEUD *no1,class DLY_NOEUD *no2):noeud1(no1),noeud2(no2)
37     {
38     }
39     DLY_SEGMENT::DLY_SEGMENT(DLY_SEGMENT& mdd):noeud1(mdd.noeud1),noeud2(mdd.noeud2),longueur(mdd.longueur)
40     {
41     }
42     DLY_SEGMENT::~DLY_SEGMENT()
43     {
44     }
45    
46     DLY_NOEUD* DLY_SEGMENT::get_noeud1(void)
47     {
48     return noeud1;
49     }
50     DLY_NOEUD* DLY_SEGMENT::get_noeud2(void)
51     {
52     return noeud2;
53     }
54    
55     void DLY_SEGMENT::insere_lien_tetra(DLY_TETRA* tet)
56     {
57     lsttet.push_back(tet);
58     }
59    
60    
61     int DLY_SEGMENT::tet_est_present(DLY_TETRA* tet)
62     {
63     for (std::vector<DLY_TETRA*>::iterator it=lsttet.begin();it!=lsttet.end();it++)
64     if ((*it)==tet) return 1;return 0;
65     }
66    
67     int DLY_SEGMENT::get_nb_tetra(void)
68     {
69     return lsttet.size();
70     }
71    
72     DLY_TETRA* DLY_SEGMENT::get_tetra(int i)
73     {
74     return lsttet[i];
75     }
76    
77     DLY_TETRA* DLY_SEGMENT::get_tetra_feuille(void)
78     {
79     int i=0;
80     int ok=0;
81     while (ok==0)
82     {
83     if (lsttet[i]->get_feuille()==1) ok=1;
84     else i++;
85     if (i>=lsttet.size()) return NULL;
86     }
87     return lsttet[i];
88     }
89    
90     double DLY_SEGMENT::get_longueur(void)
91     {
92     return longueur;
93     }
94    
95 francois 532 double DLY_SEGMENT::calcul_longueur(class FCT_TAILLE *metrique,int pas,int conserve)
96 francois 285 {
97     double l;
98     double xyz1[3],xyz2[3];
99     noeud1->get_coord(xyz1);
100     noeud2->get_coord(xyz2);
101     OT_VECTEUR_3D vec1(xyz1,xyz2);
102     if (metrique==NULL)
103     {
104     l=vec1.get_longueur();
105     if (conserve) {longueur=l;t_demilongueur=0.5;}
106     return l;
107     }
108     l=0.;
109     double dxyz[3];
110     dxyz[0]=xyz2[0]-xyz1[0];
111     dxyz[1]=xyz2[1]-xyz1[1];
112     dxyz[2]=xyz2[2]-xyz1[2];
113 francois 532 double tab[pas+1],t[pas+1];
114     for (int i=0;i<pas;i++)
115 francois 285 {
116 francois 532 double ti=1.0*i/pas;
117     double tii=1.0*(i+1)/pas;
118 francois 285 t[i]=ti;
119     t[i+1]=tii;
120     double tgauss1=0.7886751345*tii+0.2113248654*ti;
121     double xyz[3];
122     xyz[0]=xyz1[0]+tgauss1*(xyz2[0]-xyz1[0]);
123     xyz[1]=xyz1[1]+tgauss1*(xyz2[1]-xyz1[1]);
124     xyz[2]=xyz1[2]+tgauss1*(xyz2[2]-xyz1[2]);
125     double tenseur[9];
126     metrique->evaluer(xyz,tenseur);
127     double val1= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
128     double tgauss2=0.7886751345*ti+0.2113248654*tii;
129     xyz[0]=xyz1[0]+tgauss2*(xyz2[0]-xyz1[0]);
130     xyz[1]=xyz1[1]+tgauss2*(xyz2[1]-xyz1[1]);
131     xyz[2]=xyz1[2]+tgauss2*(xyz2[2]-xyz1[2]);
132     metrique->evaluer(xyz,tenseur);
133     double val2= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
134     tab[i]=l;
135     l=l+0.5*(tii-ti)*(val1+val2);
136     tab[i+1]=l;
137     }
138     if (conserve)
139     {
140     longueur=l;
141     int i;
142     for(i=0;tab[i]<l/2.;i++);
143     t_demilongueur=t[i]+(t[i+1]-t[i])/(tab[i+1]-tab[i])*(l/2.-tab[i]);
144     }
145     return l;
146     }
147     double DLY_SEGMENT::get_critere(void)
148     {
149     return critere;
150     }
151    
152     void DLY_SEGMENT::change_critere(double crit)
153     {
154     critere=crit;
155     }
156    
157    
158    
159     void DLY_SEGMENT::decoupe_noeud(std::vector<double> &lstpt) // a adapter pour taille variable
160     {
161     double xyz1[3],xyz2[3],x,y,z;
162     noeud1->get_coord(xyz1);
163     noeud2->get_coord(xyz2);
164     x=xyz1[0]+t_demilongueur*(xyz2[0]-xyz1[0]);
165     y=xyz1[1]+t_demilongueur*(xyz2[1]-xyz1[1]);
166     z=xyz1[2]+t_demilongueur*(xyz2[2]-xyz1[2]);
167     lstpt.push_back(x);
168     lstpt.push_back(y);
169     lstpt.push_back(z);
170 francois 313 }