src/common/sm_matrix.h

Go to the documentation of this file.
00001 
00005 #ifndef __sm_matrix_h__
00006 #define __sm_matrix_h__
00007 
00008 
00009 #ifndef VEC3_DEFINED
00010 #define VEC3_DEFINED
00011 typedef float vec3[3];
00012 typedef float mat3[3][3];
00013 #endif
00014 
00016 void smZero(vec3 A);
00017 
00018 void smCopy(mat3 a, mat3 b);
00020 void smCopy(vec3 a, vec3 b);
00021 void smCopy(vec3 *a, vec3 *b, int len);
00022 
00024 void smAdd(vec3 a, vec3 b);
00026 void smAdd(vec3 a, vec3 b, vec3 c);
00027 
00028 void smAdd(vec3 a, vec3 *in_vec, int count);
00029 void smAdd(vec3 a, vec3 *in_vec, vec3 *out_vec, int count);
00030 
00031 
00033 void smSub(vec3 a, vec3 b, vec3 c) ;
00034 
00035 void smSub(vec3 *in_vec, vec3 a, vec3 *out_vec, int count);
00036 
00037 void smSub(vec3 a, vec3 *in_vec,  vec3 *out_vec, int count);
00038 
00039 void smSub(vec3 *in_vec, vec3 a, int count);
00040 
00041 
00043 void smMultMat(mat3 a, mat3 b, mat3 c);
00044 
00046 void smMultMat( mat3 u, vec3 in_vec);
00048 void smMultMat( mat3 u, vec3 *in_vec, int len);
00050 void smMultMat( mat3 u, vec3 *in_vec, vec3 *out_vec, int len);
00051 
00052 //multiply vec times matrix
00053 void smMultVec(vec3 a, mat3 b) ;
00054 void smMultVec(vec3 a, mat3 b, vec3 a_out);
00055 void smMultVec(vec3 *a, mat3 b, int len);
00056 void smMultVec(vec3 *a, mat3 b, vec3 *a_out, int len );
00057 
00058 
00059 
00060 
00061 float smDotProduct(vec3 a, vec3 b);
00062 float smVectorAngle(vec3 point1, vec3 point2, vec3 center);
00063 float smVectorAngle(vec3 point1, vec3 point2);
00064 
00065 
00067 int smInverseMatrix(float original_matrix[3][3], float inverse_matrix[3][3]) ;
00068 
00069 
00071 void smMinus(vec3 a) ;
00072 
00074 float smNorm(vec3 a) ;
00075 
00077 void smNormalize(vec3 a) ;
00078 
00079 
00080 float smDistance(vec3 a, vec3 b);
00081 
00083 void smCrossProduct(vec3 a, vec3 b, vec3 c) ;
00084 
00085 void smComputeConvertMatrix(vec3 a, vec3 b, vec3 c, float convert_matrix[3][3]);
00086 
00089 void smMakeRotationMatrix(float angle, vec3 C, float rot_mat[3][3]);
00090 
00093 char smCalcMinRmsdRotation( vec3 *vec_a, vec3 *vec_b, int len, float matrix[3][3]);
00094 
00096 char smMoveMinRmsd( vec3 *vec_a, vec3 *vec_b, int len );
00097 
00098 char smCalcMinRmsdRotationTri( vec3 *vec_a, vec3 *vec_b, float matrix[3][3]);
00099 
00102 void smMoveMeanOrigin( vec3 *vec_a, int len_a, vec3 *vec_b );
00105 void smMoveMeanOrigin( vec3 *vec_a, int len_a );
00106 
00107 void smCalcMeanOrigin( vec3 *vec_a, int len_a, vec3 mean );
00108 
00109 float smCalcRmsd( vec3 *vec_a, vec3 *vec_b, int len );
00110 float smCalcInterRmsd( vec3 *vec_a, vec3 *vec_b, int len );
00111 
00112 float smCalcFrobeniusNorm( float matrix_a[3][3], float matrix_b[3][3] );
00113 
00114 #endif

Generated on Wed Apr 11 16:50:50 2007 for open_prospect by  doxygen 1.4.6