MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
sat_plane.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 //####// sat_plane.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "sat_plane.h"
25 #include "constantegeo.h"
26 #include "ot_mathematique.h"
27 
28 
29 SAT_PLANE::SAT_PLANE(unsigned long num):SAT_SURFACE(num)
30 {
31 }
32 
34 {
35 }
36 
38 {
39 }
40 
41 
42 
44 {
45  OT_VECTEUR_3D vec_normal(normal);
46  vec_normal.norme();
47  if (!(OPERATEUR::egal(vec_normal.get_x(),0.,0.0001)))
48  {
49  dir1[0]=vec_normal.get_y();
50  dir1[1]=(-vec_normal.get_x());
51  dir1[2]=0.;
52  }
53  else if (!(OPERATEUR::egal(vec_normal.get_y(),0.,0.0001)))
54  {
55  dir1[0]=0.;
56  dir1[1]=(-vec_normal.get_z());
57  dir1[2]=vec_normal.get_y();
58  }
59  else
60  {
61  dir1[0]=vec_normal.get_z();
62  dir1[1]=0.;
63  dir1[2]=0.;
64  }
65  OT_VECTEUR_3D vec_dir1(dir1);
66  vec_dir1.norme();
67  OT_VECTEUR_3D vec_dir2=vec_normal&vec_dir1;
68  dir2[0]=vec_dir2.get_x();
69  dir2[1]=vec_dir2.get_y();
70  dir2[2]=vec_dir2.get_z();
71 }
72 
73 
74 void SAT_PLANE::evaluer(double *uv,double *xyz)
75 {
76  xyz[0]=root[0]+uv[0]*dir1[0]+uv[1]*dir2[0];
77  xyz[1]=root[1]+uv[0]*dir1[1]+uv[1]*dir2[1];
78  xyz[2]=root[2]+uv[0]*dir1[2]+uv[1]*dir2[2];
79 }
80 
81 void SAT_PLANE::deriver(double *uv,double *xyzdu, double *xyzdv)
82 {
83  xyzdu[0]=dir1[0];
84  xyzdu[1]=dir1[1];
85  xyzdu[2]=dir1[2];
86  xyzdv[0]=dir2[0];
87  xyzdv[1]=dir2[1];
88  xyzdv[2]=dir2[2];
89 }
90 
91 void SAT_PLANE::deriver_seconde(double *uv,double* xyzduu,double* xyzduv,double* xyzdvv,double *xyz, double *xyzdu , double *xyzdv )
92 {
93  xyzduu[0]=0.;
94  xyzduu[1]=0.;
95  xyzduu[2]=0.;
96  xyzduv[0]=0.;
97  xyzduv[1]=0.;
98  xyzduv[2]=0.;
99  xyzdvv[0]=0.;
100  xyzdvv[1]=0.;
101  xyzdvv[2]=0.;
102  evaluer(uv,xyz);
103  deriver(uv,xyzdu,xyzdv);
104 }
105 
106 void SAT_PLANE::inverser(double *uv,double *xyz,double precision)
107 {
108  double coord[3];
109  int n1,n2;
110  coord[0]=xyz[0]-root[0];
111  coord[1]=xyz[1]-root[1];
112  coord[2]=xyz[2]-root[2];;
113  double det=dir1[0]*dir2[1]-dir1[1]*dir2[0];
114  if (!(OPERATEUR::egal(det,0.0,0.0001)))
115  {
116  n1=0;
117  n2=1;
118  }
119  else
120  {
121  det=dir1[0]*dir2[2]-dir1[2]*dir2[0];
122  if (!(OPERATEUR::egal(det,0.0,0.0001)))
123  {
124  n1=0;
125  n2=2;
126  }
127  else
128  {
129  n1=1;
130  n2=2;
131  det=dir1[1]*dir2[2]-dir1[2]*dir2[1];
132  }
133  }
134  uv[0]=(coord[n1]*dir2[n2]-coord[n2]*dir2[n1])/det;
135  uv[1]=(dir1[n1]*coord[n2]-dir1[n2]*coord[n1])/det;
136 
137 }
138 
140 {
141  return 0;
142 }
143 
145 {
146  return 0;
147 }
148 
150 {
151  return 0.;
152 }
153 
155 {
156  return 0.;
157 }
158 
160 {
161  return -1e300;
162 }
163 
165 {
166  return 1e300;
167 }
168 
170 {
171  return -1e300;
172 }
173 
175 {
176  return 1e300;
177 }
178 
179 
181 {
182  param.ajouter(root[0]);
183  param.ajouter(root[1]);
184  param.ajouter(root[2]);
185  param.ajouter(normal[0]);
186  param.ajouter(normal[1]);
187  param.ajouter(normal[2]);
189 }
190 
191 
192 
193 void SAT_PLANE::get_param_NURBS(int& indx_premier_ptctr,TPL_LISTE_ENTITE<double> &param)
194 {
195 
196  double uv[2];
197  double xyz[3];
198 
199  param.ajouter(2);
200 
201  param.ajouter(2);
202  param.ajouter(2);
203 
204 
205  param.ajouter(2);
206  param.ajouter(2);
207 
208 
209  param.ajouter(0);
210  param.ajouter(0);
211  param.ajouter(1);
212  param.ajouter(1);
213 
214 
215  param.ajouter(0);
216  param.ajouter(0);
217  param.ajouter(1);
218  param.ajouter(1);
219 
220 
221 
222  double inf_val=10e6;
223 
224 
225  xyz[0]=root[0]+inf_val*dir1[0]+inf_val*dir2[0];
226  xyz[1]=root[1]+inf_val*dir1[1]+inf_val*dir2[1];
227  xyz[2]=root[2]+inf_val*dir1[2]+inf_val*dir2[2];
228 
229  param.ajouter(xyz[0]);
230  param.ajouter(xyz[1]);
231  param.ajouter(xyz[2]);
232  param.ajouter(1.);
233 
234 
235 
236  xyz[0]=root[0]-inf_val*dir1[0]+inf_val*dir2[0];
237  xyz[1]=root[1]-inf_val*dir1[1]+inf_val*dir2[1];
238  xyz[2]=root[2]-inf_val*dir1[2]+inf_val*dir2[2];
239 
240  param.ajouter(xyz[0]);
241  param.ajouter(xyz[1]);
242  param.ajouter(xyz[2]);
243  param.ajouter(1.);
244 
245 
246 
247  xyz[0]=root[0]+inf_val*dir1[0]-inf_val*dir2[0];
248  xyz[1]=root[1]+inf_val*dir1[1]-inf_val*dir2[1];
249  xyz[2]=root[2]+inf_val*dir1[2]-inf_val*dir2[2];
250 
251  param.ajouter(xyz[0]);
252  param.ajouter(xyz[1]);
253  param.ajouter(xyz[2]);
254  param.ajouter(1.);
255 
256 
257  xyz[0]=root[0]-inf_val*dir1[0]-inf_val*dir2[0];
258  xyz[1]=root[1]-inf_val*dir1[1]-inf_val*dir2[1];
259  xyz[2]=root[2]-inf_val*dir1[2]-inf_val*dir2[2];
260 
261  param.ajouter(xyz[0]);
262  param.ajouter(xyz[1]);
263  param.ajouter(xyz[2]);
264  param.ajouter(1.);
265 
266  indx_premier_ptctr=13;
267 
268 }
SAT_PLANE::dir2
double dir2[3]
Definition: sat_plane.h:44
sat_plane.h
SAT_PLANE::get_param_NURBS
virtual void get_param_NURBS(int &indx_premier_ptctr, TPL_LISTE_ENTITE< double > &param)
Definition: sat_plane.cpp:193
SAT_PLANE::get_umin
virtual double get_umin(void)
Definition: sat_plane.cpp:159
SAT_PLANE::normal
double normal[3]
Definition: sat_plane.h:39
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
SAT_PLANE::inverser
virtual void inverser(double *uv, double *xyz, double precision=1e-6)
Definition: sat_plane.cpp:106
SAT_PLANE::evaluer
virtual void evaluer(double *uv, double *xyz)
Definition: sat_plane.cpp:74
SAT_PLANE::get_umax
virtual double get_umax(void)
Definition: sat_plane.cpp:164
SAT_PLANE::calcule_parametre
virtual void calcule_parametre(void)
Definition: sat_plane.cpp:43
SAT_PLANE::get_vmax
virtual double get_vmax(void)
Definition: sat_plane.cpp:174
SAT_PLANE::SAT_PLANE
SAT_PLANE()
Definition: sat_plane.cpp:33
OPERATEUR::egal
static int egal(double a, double b, double eps)
Definition: ot_mathematique.cpp:1629
SAT_PLANE::est_periodique_v
virtual int est_periodique_v(void)
Definition: sat_plane.cpp:144
constantegeo.h
SAT_PLANE::est_periodique_u
virtual int est_periodique_u(void)
Definition: sat_plane.cpp:139
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
SAT_PLANE::get_periode_v
virtual double get_periode_v(void)
Definition: sat_plane.cpp:154
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
GEOMETRIE::CONST::Co_PLAN
@ Co_PLAN
Definition: constantegeo.h:32
ot_mathematique.h
SAT_SURFACE
Definition: sat_surface.h:29
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
SAT_PLANE::root
double root[3]
Definition: sat_plane.h:38
SAT_PLANE::get_periode_u
virtual double get_periode_u(void)
Definition: sat_plane.cpp:149
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
SAT_PLANE::deriver
virtual void deriver(double *uv, double *xyzdu, double *xyzdv)
Definition: sat_plane.cpp:81
SAT_PLANE::get_vmin
virtual double get_vmin(void)
Definition: sat_plane.cpp:169
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
SAT_PLANE::get_type_geometrique
virtual int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)
Definition: sat_plane.cpp:180
TPL_LISTE_ENTITE< double >
SAT_PLANE::dir1
double dir1[3]
Definition: sat_plane.h:43
SAT_PLANE::deriver_seconde
virtual void deriver_seconde(double *uv, double *xyzduu, double *xyzduv, double *xyzdvv, double *xyz=NULL, double *xyzdu=NULL, double *xyzdv=NULL)
Definition: sat_plane.cpp:91
SAT_PLANE::~SAT_PLANE
virtual ~SAT_PLANE()
Definition: sat_plane.cpp:37