ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_courbe.cpp
Revision: 67
Committed: Tue Mar 25 15:59:01 2008 UTC (17 years, 1 month ago) by souaissa
Original Path: magic/lib/geometrie/geometrie/src/vct_courbe.cpp
File size: 3801 byte(s)
Log Message:
mise en conformité des noms de topologies dans la vectorisation

File Contents

# User Rev Content
1 souaissa 66 #include "gestionversion.h"
2    
3     //---------------------------------------------------------------------------
4    
5    
6     #pragma hdrstop
7    
8     #include "vct_courbe.h"
9     #include "mg_courbe.h"
10     #include "mg_arete.h"
11     #include <iomanip.h>
12     //---------------------------------------------------------------------------
13    
14     #pragma package(smart_init)
15    
16    
17    
18     VCT_COURBE::VCT_COURBE(MG_COURBE* elemgeo):VCT_ELEMENT_GEOMETRIQUE(elemgeo)
19     {
20     elem_geo->get_param_NURBS(indx_premier_ptctr,nurbs_params);
21     nb_points=1/4.*(nurbs_params.get_nb()-indx_premier_ptctr);
22     }
23    
24    
25     VCT_COURBE::VCT_COURBE(VCT_COURBE& mdd):VCT_ELEMENT_GEOMETRIQUE(mdd.elem_geo)
26     {
27     mdd.elem_geo->get_param_NURBS(indx_premier_ptctr,nurbs_params);
28     nb_points=1/4.*(nurbs_params.get_nb()-indx_premier_ptctr);
29     }
30    
31    
32     VCT_COURBE::~VCT_COURBE()
33     {
34     }
35    
36     void VCT_COURBE::get_vectorisation(vector<double2>& vct_lst)
37     {
38    
39     double2 ZERO=0.;
40    
41     TPL_LISTE_ENTITE<double> paramm_courb;
42    
43     int nb_u=nurbs_params.get(3);
44    
45     double2 X1,Y1,Z1,w1,X2,Y2,Z2,w2,vx,vy,vz,w;
46    
47    
48     for(int s=0;s<nb_u-1;s++)
49     {
50     X1=nurbs_params.get(indx_premier_ptctr+ 4 * s);
51     Y1=nurbs_params.get(indx_premier_ptctr+ 4 * s + 1);
52     Z1=nurbs_params.get(indx_premier_ptctr+ 4 * s + 2);
53     w1=nurbs_params.get(indx_premier_ptctr+ 4 * s + 3);
54    
55     X2=nurbs_params.get(indx_premier_ptctr+ 4 * (s + 1));
56     Y2=nurbs_params.get(indx_premier_ptctr+ 4 * (s + 1) + 1);
57     Z2=nurbs_params.get(indx_premier_ptctr+ 4 * (s + 1) + 2);
58     w2=nurbs_params.get(indx_premier_ptctr+ 4 * (s + 1) + 3);
59    
60     vx=X2-X1;
61     vy=Y2-Y1;
62     vz=Z2-Z1;
63     w=w2-w1;
64    
65     double2 norm_au_carre=vx*vx+vy*vy+vz*vz+w*w;
66     double2 norm=norm_au_carre^0.5;
67 souaissa 67
68 souaissa 66 if(norm!=ZERO){
69     vx=vx/norm;
70     vy=vy/norm;
71     vz=vz/norm;
72     w=w/norm;
73     double2 eps=1e-6;
74     if(fabs(vx)<eps) vx=0;
75     if(fabs(vy)<eps) vy=0;
76     if(fabs(vz)<eps) vz=0;
77     if(fabs(w)<eps) w=0;
78     vct_lst.insert(vct_lst.end(),vx);
79     vct_lst.insert(vct_lst.end(),vy);
80     vct_lst.insert(vct_lst.end(),vz);
81     vct_lst.insert(vct_lst.end(),w);
82     }
83    
84     }
85    
86     }
87    
88     int VCT_COURBE::get_nb_points()
89     {
90     return nb_points;
91     }
92    
93     void VCT_COURBE::get_geo_barycentre(double2* xyz)
94     {
95     xyz[0]=0.;
96     xyz[1]=0.;
97     xyz[2]=0.;
98     xyz[3]=0.;
99    
100    
101    
102     for(int i=0;i<nb_points;i++)
103     {
104     xyz[0]=xyz[0]+nurbs_params.get(4*i+indx_premier_ptctr);
105     xyz[1]=xyz[1]+nurbs_params.get(4*i+indx_premier_ptctr+1);
106     xyz[2]=xyz[2]+nurbs_params.get(4*i+indx_premier_ptctr+2);
107     xyz[3]=xyz[3]+nurbs_params.get(4*i+indx_premier_ptctr+3);
108     }
109    
110     xyz[0]=(1./nb_points)*xyz[0];
111     xyz[1]=(1./nb_points)*xyz[1];
112     xyz[2]=(1./nb_points)*xyz[2];
113     xyz[3]=(1./nb_points)*xyz[3];
114     }
115    
116    
117    
118    
119     double2 VCT_COURBE::get_inertie_au_centre_de_masse()
120     {
121     double2 xyz_g[4];
122     double2 xyzi[4];
123     this->get_geo_barycentre(xyz_g);
124    
125     xyzi[0]=0.;
126     xyzi[1]=0.;
127     xyzi[2]=0.;
128     xyzi[3]=0.;
129    
130     double2 moment_inertie=0.;
131     for(int i=0;i<nb_points;i++)
132     {
133     xyzi[0]=xyz_g[0]-nurbs_params.get(4*i+indx_premier_ptctr);
134     xyzi[1]=xyz_g[1]-nurbs_params.get(4*i+indx_premier_ptctr+1);
135     xyzi[2]=xyz_g[2]-nurbs_params.get(4*i+indx_premier_ptctr+2);
136     xyzi[3]=xyz_g[3]-nurbs_params.get(4*i+indx_premier_ptctr+3);
137     moment_inertie=moment_inertie+xyzi[0]*xyzi[0]+xyzi[1]*xyzi[1]+xyzi[2]*xyzi[2]+xyzi[3]*xyzi[3];
138     }
139     return moment_inertie;
140     }
141    
142    
143    
144    
145     void VCT_COURBE::enregistrer(std::ostream& o)
146     {
147    
148     int compt=0;
149     for(int i=indx_premier_ptctr;i<nurbs_params.get_nb();i++)
150     {
151     o<<setw(15)<<nurbs_params.get(i);
152     compt++;
153     if(compt==4) {
154     o<<endl;
155     compt=0;}
156     }
157    
158     }
159