ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/addin/step/src/stline.cpp
Revision: 1156
Committed: Thu Jun 13 22:02:48 2024 UTC (14 months ago) by francois
File size: 5116 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1156 //####//------------------------------------------------------------
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     //####// stline.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:53:59 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 283
23    
24    
25     #include "stline.h"
26     #include "stvector.h"
27     #include "stdirection.h"
28     #include "st_point.h"
29     #include "st_gestionnaire.h"
30     #include "ot_mathematique.h"
31     #include "constantegeo.h"
32    
33     #include <math.h>
34    
35    
36    
37    
38    
39     ST_LINE::ST_LINE(long LigneCourante,std::string idori,long point,long vector):ST_COURBE(LigneCourante,idori),id_point(point),id_vector(vector)
40     {
41     }
42    
43     ST_LINE::ST_LINE(double *origine,double *dir):ST_COURBE()
44     {
45     point[0]=origine[0];
46     point[1]=origine[1];
47     point[2]=origine[2];
48     vecteur_directeur[0]=dir[0];
49     vecteur_directeur[1]=dir[1];
50     vecteur_directeur[2]=dir[2];
51     }
52    
53    
54    
55     long ST_LINE::get_id_point(void)
56     {
57     return id_point;
58     }
59    
60     void ST_LINE::initialiser(ST_GESTIONNAIRE *gest)
61     {
62     ST_VECTOR* vecteur=gest->lst_vector.getid(id_vector);
63     ST_POINT* pt=gest->lst_point.getid(id_point);
64     pt->evaluer(point);
65     ST_DIRECTION* dir=gest->lst_direction.getid(vecteur->get_id_direction());
66     double *direct=dir->get_direction();
67     vecteur_directeur[0]=direct[0];
68     vecteur_directeur[1]=direct[1];
69     vecteur_directeur[2]=direct[2];
70     }
71    
72     long ST_LINE::get_id_vector(void)
73     {
74     return id_vector;
75     }
76     void ST_LINE::evaluer(double t,double *xyz)
77     {
78     xyz[0]=point[0]+t*vecteur_directeur[0];
79     xyz[1]=point[1]+t*vecteur_directeur[1];
80     xyz[2]=point[2]+t*vecteur_directeur[2];
81     }
82     void ST_LINE::deriver(double t,double *dxyz)
83     {
84     dxyz[0]=vecteur_directeur[0];
85     dxyz[1]=vecteur_directeur[1];
86     dxyz[2]=vecteur_directeur[2];
87     }
88     void ST_LINE::deriver_seconde(double t,double *ddxyz,double* dxyz ,double* xyz )
89     {
90     ddxyz[0]=0.;
91     ddxyz[1]=0.;
92     ddxyz[2]=0.;
93    
94     if (dxyz!=NULL)
95     {
96     dxyz[0]=vecteur_directeur[0];
97     dxyz[1]=vecteur_directeur[1];
98     dxyz[2]=vecteur_directeur[2];
99     }
100     if (xyz!=NULL)
101     {
102     xyz[0]=point[0]+t*vecteur_directeur[0];
103     xyz[1]=point[1]+t*vecteur_directeur[1];
104     xyz[2]=point[2]+t*vecteur_directeur[2];
105     }
106     }
107    
108    
109     void ST_LINE::inverser(double& t,double *xyz,double precision)
110     {
111     int num;
112     if (!(OPERATEUR::egal(vecteur_directeur[0],0.,0.000001))) num=0;
113     else if (!(OPERATEUR::egal(vecteur_directeur[1],0.,0.000001))) num=1;
114     else num=2;
115     t=xyz[num]-point[num];
116     t=t/vecteur_directeur[num];
117     }
118    
119    
120     double ST_LINE::get_tmin()
121     {
122     return -1e300;
123     }
124     double ST_LINE::get_tmax()
125     {
126     return 1e300;
127     }
128     double ST_LINE::get_longueur(double t1,double t2,double precis)
129     {
130     double norme=vecteur_directeur[0]*vecteur_directeur[0]+vecteur_directeur[1]*vecteur_directeur[1]+vecteur_directeur[2]*vecteur_directeur[2];
131     norme=sqrt(norme);
132     return norme*(t2-t1);
133     }
134     int ST_LINE::est_periodique(void)
135     {
136     return 0;
137     }
138     double ST_LINE::get_periode(void)
139     {
140     return 0.;
141     }
142    
143     int ST_LINE::get_type_geometrique(TPL_LISTE_ENTITE<double> &param)
144     {
145     param.ajouter(point[0]);
146     param.ajouter(point[1]);
147     param.ajouter(point[2]);
148     param.ajouter(vecteur_directeur[0]);
149     param.ajouter(vecteur_directeur[1]);
150     param.ajouter(vecteur_directeur[2]);
151 francois 1149 return GEOMETRIE::CONST::Co_LINE;
152 francois 283 }
153    
154    
155     void ST_LINE::est_util(ST_GESTIONNAIRE* gest)
156     {
157     util=true;
158     gest->lst_point.getid(id_point)->est_util(gest);
159     gest->lst_vector.getid(id_vector)->est_util(gest);
160     }
161    
162    
163    
164     void ST_LINE::get_param_NURBS(int& indx_premier_ptctr,TPL_LISTE_ENTITE<double> &param)
165     {
166     param.ajouter(1);
167    
168     param.ajouter(2);
169     param.ajouter(0);
170    
171    
172     param.ajouter(2);
173     param.ajouter(0);
174    
175    
176     param.ajouter(0);
177     param.ajouter(0);
178     param.ajouter(1);
179     param.ajouter(1);
180    
181     double u_inf=10e6;
182     double xyz[3];
183    
184     xyz[0]=point[0]+u_inf*vecteur_directeur[0];
185     xyz[1]=point[1]+u_inf*vecteur_directeur[1];
186     xyz[2]=point[2]+u_inf*vecteur_directeur[2];
187    
188     param.ajouter(xyz[0]);
189     param.ajouter(xyz[1]);
190     param.ajouter(xyz[2]);
191 francois 433 param.ajouter(1.);
192 francois 283
193    
194     xyz[0]=point[0]-u_inf*vecteur_directeur[0];
195     xyz[1]=point[1]-u_inf*vecteur_directeur[1];
196     xyz[2]=point[2]-u_inf*vecteur_directeur[2];
197    
198     param.ajouter(xyz[0]);
199     param.ajouter(xyz[1]);
200     param.ajouter(xyz[2]);
201 francois 433 param.ajouter(1.);
202 francois 283
203     indx_premier_ptctr=9;
204    
205     }