00001
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _GAN_EUCLID3D_H
00030 #define _GAN_EUCLID3D_H
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036 #include <gandalf/vision/rotate3D.h>
00037 #include <gandalf/linalg/4x4matrix.h>
00038 #include <gandalf/linalg/3x4matrix.h>
00039
00053 typedef struct
00054 {
00056 Gan_Rot3D rot;
00057
00059 Gan_Vector3 trans;
00060 } Gan_Euclid3D;
00061
00065 typedef struct Gan_Euclid3D_TRCov
00066 {
00068 Gan_Rot3D_Type type;
00069
00071 union
00072 {
00074 Gan_Matrix34 q;
00075
00077 Gan_Matrix33 le;
00078 } d;
00079 } Gan_Euclid3D_TRCov;
00080
00084 typedef struct
00085 {
00087 Gan_Rot3D_Cov Crr;
00088
00090 Gan_Euclid3D_TRCov Ctr;
00091
00093 Gan_SquMatrix33 Ctt;
00094 } Gan_Euclid3r_Cov;
00095
00096 Gan_Bool gan_euclid3D_build_quaternion ( Gan_Euclid3D *euc,
00097 double TX, double TY, double TZ,
00098 double q0, double q1,
00099 double q2, double q3 );
00100 Gan_Bool gan_euclid3D_build_exponential ( Gan_Euclid3D *euc,
00101 double TX, double TY, double TZ,
00102 double rx, double ry, double rz );
00103 Gan_Bool gan_euclid3D_build_angle_axis ( Gan_Euclid3D *euc,
00104 double TX, double TY, double TZ,
00105 double angle,
00106 double ax, double ay, double az );
00107 Gan_Bool gan_euclid3D_build_matrix ( Gan_Euclid3D *euc,
00108 double TX, double TY, double TZ,
00109 double Rxx, double Rxy, double Rxz,
00110 double Ryx, double Ryy, double Ryz,
00111 double Rzx, double Rzy, double Rzz );
00112 void gan_euclid3D_ident_q ( Gan_Euclid3D *euc,
00113 Gan_Rot3D_Type rot_type );
00114 Gan_Euclid3D gan_euclid3D_ident_s ( Gan_Rot3D_Type rot_type );
00115 Gan_Bool gan_euclid3D_scale_q ( Gan_Euclid3D *euc_src, double scale,
00116 Gan_Euclid3D *euc_dest );
00117 Gan_Euclid3D gan_euclid3D_scale_s ( Gan_Euclid3D *euc, double scale );
00118
00124 Gan_Bool gan_euclid3D_scale_i ( Gan_Euclid3D *euc1, double s );
00125
00131 Gan_Bool gan_euclid3D_divide_q ( Gan_Euclid3D *euc1, double s,
00132 Gan_Euclid3D *euc2 );
00133
00139 Gan_Bool gan_euclid3D_divide_i ( Gan_Euclid3D *euc1, double s );
00140
00146 Gan_Bool gan_euclid3D_add_q ( Gan_Euclid3D *euc1, Gan_Euclid3D *euc2,
00147 Gan_Euclid3D *euc3 );
00148
00154 Gan_Bool gan_euclid3D_sub_q ( Gan_Euclid3D *euc1, Gan_Euclid3D *euc2,
00155 Gan_Euclid3D *euc3 );
00156
00165 #ifdef __cplusplus
00166 }
00167 #endif
00168
00169 #endif