#include <Animation_transformation.h>

Public Member Functions | |
| Animation_transformation () | |
| ~Animation_transformation () | |
| int | set_size_time (int size) |
| int | set_size_angle (int size) |
| int | set_time (int k_time, double val) |
| int | set_angle (int k_time, int k_axis, double val) |
| int | set_translation (int k_trime, double tx, double ty, double tz) |
| int | set_anim_matrix (int k_time, int k_dim, double value) |
| double | get_angle (int k_time, int k_axis) |
| Matrix | get_rotation (double t) |
| Matrix | get_translation (double t) |
| Matrix | get_matrix (double t) |
| int | get_size () |
| double | get_time (int k_index) |
| Animation_transformation & | operator= (const Animation_transformation &) |
Private Attributes | |
| int | bone_number |
| std::vector< double > | angle_x |
| std::vector< double > | angle_y |
| std::vector< double > | angle_z |
| std::vector< double > | translation |
| std::vector< double > | time |
| std::vector< double > | anim_matrix |
Definition at line 27 of file Animation_transformation.h.
| Animation_transformation::Animation_transformation | ( | ) |
Definition at line 6 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, anim_matrix, bone_number, time, and translation.
00007 { 00008 angle_x.resize(2); 00009 angle_y.resize(2); 00010 angle_z.resize(2); 00011 time.resize(2); 00012 translation.resize(2*3); 00013 anim_matrix.resize(2*16); 00014 00015 time[0]=0; 00016 angle_x[0]=0;angle_y[0]=0;angle_z[0]=0; 00017 for(int count=0;count<3;count++) 00018 translation[count]=0.0; 00019 for(int count_1=0;count_1<4;count_1++) 00020 for(int count_2=0;count_2<4;count_2++) 00021 { 00022 if(count_1!=count_2) 00023 anim_matrix[4*count_1+count_2]=0.0; 00024 else 00025 anim_matrix[4*count_1+count_2]=1.0; 00026 } 00027 00028 time[1]=200; 00029 angle_x[1]=0;angle_y[1]=0;angle_z[1]=0; 00030 for(int count=0;count<3;count++) 00031 translation[count+3]=0.0; 00032 for(int count_1=0;count_1<4;count_1++) 00033 for(int count_2=0;count_2<4;count_2++) 00034 { 00035 if(count_1!=count_2) 00036 anim_matrix[4*count_1+count_2+16]=0.0; 00037 else 00038 anim_matrix[4*count_1+count_2+16]=1.0; 00039 } 00040 00041 00042 bone_number=-1; 00043 }
| Animation_transformation::~Animation_transformation | ( | ) |
| int Animation_transformation::set_size_time | ( | int | size | ) |
Definition at line 50 of file Animation_transformation.cpp.
References time.
00051 { 00052 int ok=0; 00053 time.resize(size); 00054 for(int k=0;k<size;k++) 00055 time[k]=0; 00056 return ok; 00057 }
| int Animation_transformation::set_size_angle | ( | int | size | ) |
Definition at line 59 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, anim_matrix, and translation.
00060 { 00061 int ok=0; 00062 angle_x.resize(size); 00063 angle_y.resize(size); 00064 angle_z.resize(size); 00065 translation.resize(3*size); 00066 anim_matrix.resize(16*size); 00067 for(int k=0;k<size;k++) 00068 { 00069 angle_x[k]=0; 00070 angle_y[k]=0; 00071 angle_z[k]=0; 00072 } 00073 for(int k=0;k<(int)translation.size();k++) 00074 translation[k]=0; 00075 for(int k=0;k<(int)anim_matrix.size()/16;k++) 00076 for(int count_1=0;count_1<4;count_1++) 00077 for(int count_2=0;count_2<4;count_2++) 00078 { 00079 if(count_1!=count_2) 00080 anim_matrix[4*count_1+count_2+16*k]=0.0; 00081 else 00082 anim_matrix[4*count_1+count_2+16*k]=1.0; 00083 } 00084 00085 00086 00087 return ok; 00088 }
| int Animation_transformation::set_time | ( | int | k_time, | |
| double | val | |||
| ) |
Definition at line 92 of file Animation_transformation.cpp.
References time.
00093 { 00094 int ok=0; 00095 if((unsigned int)k_time>=time.size()) 00096 { 00097 cout<<"ERROR time excced the capacity"<<endl; 00098 exit(-1); 00099 } 00100 time[k_time]=val; 00101 return ok; 00102 }
| int Animation_transformation::set_angle | ( | int | k_time, | |
| int | k_axis, | |||
| double | val | |||
| ) |
Definition at line 103 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, PI, and time.
00104 { 00105 int ok=0; 00106 if((unsigned int)k_time>=time.size()) 00107 { 00108 cout<<"ERROR time exceed the capacity"<<endl; 00109 exit(-1); 00110 } 00111 if(k_axis==0) 00112 angle_x[k_time]=val/180.0*PI; 00113 if(k_axis==1) 00114 angle_y[k_time]=val/180.0*PI; 00115 if(k_axis==2) 00116 angle_z[k_time]=val/180.0*PI; 00117 00118 return ok; 00119 }
| int Animation_transformation::set_translation | ( | int | k_trime, | |
| double | tx, | |||
| double | ty, | |||
| double | tz | |||
| ) |
Definition at line 121 of file Animation_transformation.cpp.
References time, and translation.
00122 { 00123 int ok=0; 00124 if((unsigned int)k_time>=time.size() || (unsigned int)(3*k_time+2)>=translation.size()) 00125 { 00126 cout<<"ERROR time exceed the capacity in set_translation"<<endl; 00127 exit(-1); 00128 } 00129 translation[3*k_time+0] = tx; 00130 translation[3*k_time+1] = ty; 00131 translation[3*k_time+2] = tz; 00132 00133 return ok; 00134 }
| int Animation_transformation::set_anim_matrix | ( | int | k_time, | |
| int | k_dim, | |||
| double | value | |||
| ) |
Definition at line 136 of file Animation_transformation.cpp.
References anim_matrix, and time.
00137 { 00138 00139 00140 int ok=0; 00141 if((unsigned int)k_time>=time.size() || (unsigned int)(16*k_time+15)>=anim_matrix.size()) 00142 { 00143 cout<<"ERROR time exceed the capacity in set_anim_matrix"<<endl; 00144 exit(-1); 00145 } 00146 anim_matrix[16*k_time+k_dim] = value; 00147 00148 00149 00150 return ok; 00151 }
| double Animation_transformation::get_angle | ( | int | k_time, | |
| int | k_axis | |||
| ) |
Definition at line 154 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, PI, and time.
00155 { 00156 if((unsigned int)k_time>=time.size()) 00157 { 00158 cout<<"ERROR time exceed the capacity in get_angle"<<endl; 00159 exit(-1); 00160 } 00161 if(k_axis==0) 00162 return angle_x[k_time]*180.0/PI; 00163 if(k_axis==1) 00164 return angle_y[k_time]*180.0/PI; 00165 if(k_axis==2) 00166 return angle_z[k_time]*180.0/PI; 00167 00168 else 00169 cout<<"ERROR k axis"<<endl; 00170 exit(-1); 00171 00172 }
| Matrix Animation_transformation::get_rotation | ( | double | t | ) |
Definition at line 174 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, Matrix::set_vector_rotation(), and time.
00175 { 00176 //should take t into account 00177 00178 Matrix R; 00179 Matrix temp_rot; 00180 00181 if(time.size()>20000) 00182 {printf("Something weird in time size for animation time_size is big ... init ?\n");exit(-1);} 00183 00184 int k=0; 00185 if(t>=time[time.size()-1]) 00186 { 00187 printf("error time t exceed time dimension in Animation_transformation t=%f, tmax=%f (t[%d])\n",t,time[time.size()-1],time.size()-1); 00188 exit(-1); 00189 } 00190 00191 if(t<=0) 00192 k=0; 00193 else 00194 { 00195 if(t>=time[time.size()-1]) 00196 k=time.size(); 00197 else 00198 { 00199 while(!(time[k]<=t && time[k+1]>t)) 00200 k++; 00201 } 00202 } 00203 00204 //printf("%d,(%f,%f),(%f,%f)\n",k,time[k],time[k+1],angle_x[k],angle_x[k+1]); 00205 00206 00207 double u = (t-time[k])/(time[k+1]-time[k]); 00208 00209 00210 00211 double ut1=1-u; 00212 double ut2=1-ut1; 00213 00214 00215 temp_rot.set_vector_rotation(1,0,0,angle_x[k]*ut1+angle_x[k+1]*ut2); 00216 R = R*temp_rot; 00217 temp_rot.set_vector_rotation(0,1,0,angle_y[k]*ut1+angle_y[k+1]*ut2); 00218 R = R*temp_rot; 00219 temp_rot.set_vector_rotation(0,0,1,angle_z[k]*ut1+angle_z[k+1]*ut2); 00220 R = R*temp_rot; 00221 00222 00223 00224 return R; 00225 }

| Matrix Animation_transformation::get_translation | ( | double | t | ) |
Definition at line 295 of file Animation_transformation.cpp.
References Matrix::set_translation(), time, and translation.
00296 { 00297 //should take t into account 00298 00299 Matrix T; 00300 00301 00302 int k=0; 00303 if(t>=time[time.size()-1]) 00304 { 00305 printf("error time t exceed time dimension in Animation_transformation t=%f, tmax=%f (t[%d])\n",t,time[time.size()-1],time.size()-1); 00306 exit(-1); 00307 } 00308 00309 if(t<=time[0]) 00310 k=0; 00311 else 00312 { 00313 if(t>=time[time.size()-1]) 00314 k=time.size(); 00315 else 00316 { 00317 while(!(time[k]<=t && time[k+1]>t)) 00318 { 00319 k++; 00320 if(k>=(int)time.size()-1) 00321 {printf("something wrong in animation, k=size_time ... for time %f\n",t);exit(-1);} 00322 } 00323 } 00324 } 00325 00326 double u = (t-time[k])/(time[k+1]-time[k]); 00327 00328 00329 if(3*(k+1)+2>(int)translation.size()) 00330 {printf("Error index too large for translation vector in Animation_transformation [%d] / [%d]\n",3*(k+1)+2,translation.size());exit(-1);} 00331 00332 00333 double ut1=1-u; 00334 double ut2=1-ut1; 00335 00336 00337 T.set_translation(translation[3*k+0]*ut1+translation[3*(k+1)+0]*ut2, 00338 translation[3*k+1]*ut1+translation[3*(k+1)+1]*ut2, 00339 translation[3*k+2]*ut1+translation[3*(k+1)+2]*ut2); 00340 00341 return T; 00342 }

| Matrix Animation_transformation::get_matrix | ( | double | t | ) |
Definition at line 228 of file Animation_transformation.cpp.
References anim_matrix, Matrix::set_value(), and time.
00229 { 00230 //should take t into account 00231 00232 Matrix M; 00233 00234 00235 00236 if(time.size()>2000) 00237 {printf("Something weird in time size for animation ... init ?\n");exit(-1);} 00238 00239 int k=0; 00240 if(t>=time[time.size()-1]) 00241 { 00242 printf("error time t exceed time dimension in Animation_transformation t=%f, tmax=%f (t[%d])\n",t,time[time.size()-1],time.size()-1); 00243 exit(-1); 00244 } 00245 00246 if(t<=time[0]) 00247 k=0; 00248 else 00249 { 00250 if(t>=time[time.size()-1]) 00251 k=time.size(); 00252 else 00253 { 00254 while(!(time[k]<=t && time[k+1]>t)) 00255 { 00256 k++; 00257 if(k>=(int)time.size()-1) 00258 {printf("something wrong in animation, k=size_time ... for time %f\n",t);exit(-1);} 00259 } 00260 } 00261 } 00262 00263 00264 00265 double u = (t-time[k])/(time[k+1]-time[k]); 00266 00267 00268 00269 double ut1=1-u; 00270 double ut2=1-ut1; 00271 00272 00273 Matrix M1; 00274 Matrix M2; 00275 00276 00277 00278 int k1=0,k2=0; 00279 for(k1=0;k1<4;k1++) 00280 for(k2=0;k2<4;k2++) 00281 { 00282 M1.set_value(anim_matrix[16*k+4*k1+k2],k2,k1); 00283 M2.set_value(anim_matrix[16*(k+1)+4*k1+k2],k2,k1); 00284 } 00285 00286 M = M1*ut1+M2*ut2; 00287 00288 00289 00290 00291 return M; 00292 }

| int Animation_transformation::get_size | ( | ) |
Definition at line 344 of file Animation_transformation.cpp.
References time.
00345 { 00346 return time.size(); 00347 }
| double Animation_transformation::get_time | ( | int | k_index | ) |
Definition at line 379 of file Animation_transformation.cpp.
References time.
00380 { 00381 if(k_index<0 || k_index>=(int)time.size()) 00382 {printf("Error time size is too large\n");exit(-1);} 00383 return time[k_index]; 00384 }
| Animation_transformation & Animation_transformation::operator= | ( | const Animation_transformation & | anim | ) |
Definition at line 350 of file Animation_transformation.cpp.
References angle_x, angle_y, angle_z, anim_matrix, bone_number, time, and translation.
00351 { 00352 bone_number = anim.bone_number; 00353 00354 if(bone_number!=-1) 00355 { 00356 angle_x.resize(bone_number); 00357 angle_y.resize(bone_number); 00358 angle_z.resize(bone_number); 00359 translation.resize(3*bone_number); 00360 time.resize(bone_number); 00361 anim_matrix.resize(16*bone_number); 00362 00363 int k=0; 00364 for(k=0;k<bone_number;k++) 00365 { 00366 angle_x[k] = anim.angle_x[k]; 00367 angle_y[k] = anim.angle_y[k]; 00368 angle_z[k] = anim.angle_z[k]; 00369 time[k] = anim.time[k]; 00370 translation[k] = anim.translation[k]; 00371 anim_matrix[k] = anim.anim_matrix[k]; 00372 } 00373 } 00374 00375 return *this; 00376 }
int Animation_transformation::bone_number [private] |
Definition at line 56 of file Animation_transformation.h.
Referenced by Animation_transformation(), and operator=().
std::vector<double> Animation_transformation::angle_x [private] |
Definition at line 57 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_angle(), get_rotation(), operator=(), set_angle(), and set_size_angle().
std::vector<double> Animation_transformation::angle_y [private] |
Definition at line 58 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_angle(), get_rotation(), operator=(), set_angle(), and set_size_angle().
std::vector<double> Animation_transformation::angle_z [private] |
Definition at line 59 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_angle(), get_rotation(), operator=(), set_angle(), and set_size_angle().
std::vector<double> Animation_transformation::translation [private] |
Definition at line 60 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_translation(), operator=(), set_size_angle(), and set_translation().
std::vector<double> Animation_transformation::time [private] |
Definition at line 61 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_angle(), get_matrix(), get_rotation(), get_size(), get_time(), get_translation(), operator=(), set_angle(), set_anim_matrix(), set_size_time(), set_time(), and set_translation().
std::vector<double> Animation_transformation::anim_matrix [private] |
Definition at line 62 of file Animation_transformation.h.
Referenced by Animation_transformation(), get_matrix(), operator=(), set_anim_matrix(), and set_size_angle().
1.5.6