ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_courbe.cpp
Revision: 66
Committed: Wed Mar 19 16:45:26 2008 UTC (17 years, 1 month ago) by souaissa
Original Path: magic/lib/geometrie/geometrie/src/vct_courbe.cpp
File size: 4056 byte(s)
Log Message:
reorganisation des classes de vectorisation. Situation normalement final pour le doc de khaled

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     /*
68     if(norm==ZERO)
69     {
70     vct_lst.insert(vct_lst.end(),0.);
71     vct_lst.insert(vct_lst.end(),0.);
72     vct_lst.insert(vct_lst.end(),0.);
73     vct_lst.insert(vct_lst.end(),0.);
74     } */
75     if(norm!=ZERO){
76     vx=vx/norm;
77     vy=vy/norm;
78     vz=vz/norm;
79     w=w/norm;
80     double2 eps=1e-6;
81     if(fabs(vx)<eps) vx=0;
82     if(fabs(vy)<eps) vy=0;
83     if(fabs(vz)<eps) vz=0;
84     if(fabs(w)<eps) w=0;
85     vct_lst.insert(vct_lst.end(),vx);
86     vct_lst.insert(vct_lst.end(),vy);
87     vct_lst.insert(vct_lst.end(),vz);
88     vct_lst.insert(vct_lst.end(),w);
89     }
90    
91     }
92    
93     }
94    
95     int VCT_COURBE::get_nb_points()
96     {
97     return nb_points;
98     }
99    
100     void VCT_COURBE::get_geo_barycentre(double2* xyz)
101     {
102     xyz[0]=0.;
103     xyz[1]=0.;
104     xyz[2]=0.;
105     xyz[3]=0.;
106    
107    
108    
109     for(int i=0;i<nb_points;i++)
110     {
111     xyz[0]=xyz[0]+nurbs_params.get(4*i+indx_premier_ptctr);
112     xyz[1]=xyz[1]+nurbs_params.get(4*i+indx_premier_ptctr+1);
113     xyz[2]=xyz[2]+nurbs_params.get(4*i+indx_premier_ptctr+2);
114     xyz[3]=xyz[3]+nurbs_params.get(4*i+indx_premier_ptctr+3);
115     }
116    
117     xyz[0]=(1./nb_points)*xyz[0];
118     xyz[1]=(1./nb_points)*xyz[1];
119     xyz[2]=(1./nb_points)*xyz[2];
120     xyz[3]=(1./nb_points)*xyz[3];
121     }
122    
123    
124    
125    
126     double2 VCT_COURBE::get_inertie_au_centre_de_masse()
127     {
128     double2 xyz_g[4];
129     double2 xyzi[4];
130     this->get_geo_barycentre(xyz_g);
131    
132     xyzi[0]=0.;
133     xyzi[1]=0.;
134     xyzi[2]=0.;
135     xyzi[3]=0.;
136    
137     double2 moment_inertie=0.;
138     for(int i=0;i<nb_points;i++)
139     {
140     xyzi[0]=xyz_g[0]-nurbs_params.get(4*i+indx_premier_ptctr);
141     xyzi[1]=xyz_g[1]-nurbs_params.get(4*i+indx_premier_ptctr+1);
142     xyzi[2]=xyz_g[2]-nurbs_params.get(4*i+indx_premier_ptctr+2);
143     xyzi[3]=xyz_g[3]-nurbs_params.get(4*i+indx_premier_ptctr+3);
144     moment_inertie=moment_inertie+xyzi[0]*xyzi[0]+xyzi[1]*xyzi[1]+xyzi[2]*xyzi[2]+xyzi[3]*xyzi[3];
145     }
146     return moment_inertie;
147     }
148    
149    
150    
151    
152     void VCT_COURBE::enregistrer(std::ostream& o)
153     {
154    
155     int compt=0;
156     for(int i=indx_premier_ptctr;i<nurbs_params.get_nb();i++)
157     {
158     o<<setw(15)<<nurbs_params.get(i);
159     compt++;
160     if(compt==4) {
161     o<<endl;
162     compt=0;}
163     }
164    
165     }
166