Main Page | Modules | Class List | File List | Class Members | File Members

3x4matrixf.h

Go to the documentation of this file.
00001 
00014 #ifndef _GAN_3X4MATRIXF_H
00015 #define _GAN_3X4MATRIXF_H
00016 
00017 #include <stdlib.h>
00018 #include <stdio.h>
00019 #include <math.h>
00020 #include <gandalf/common/misc_defs.h>
00034 /* This library is free software; you can redistribute it and/or
00035    modify it under the terms of the GNU Lesser General Public
00036    License as published by the Free Software Foundation; either
00037    version 2.1 of the License, or (at your option) any later version.
00038 
00039    This library is distributed in the hope that it will be useful,
00040    but WITHOUT ANY WARRANTY; without even the implied warranty of
00041    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00042    Lesser General Public License for more details.
00043 
00044    You should have received a copy of the GNU Lesser General Public
00045    License along with this library; if not, write to the Free Software
00046    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00047 */
00048 
00049 #ifndef _GAN_REPEAT34_H
00050 #define _GAN_REPEAT34_H
00051 
00065 /* This library is free software; you can redistribute it and/or
00066    modify it under the terms of the GNU Lesser General Public
00067    License as published by the Free Software Foundation; either
00068    version 2.1 of the License, or (at your option) any later version.
00069 
00070    This library is distributed in the hope that it will be useful,
00071    but WITHOUT ANY WARRANTY; without even the implied warranty of
00072    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00073    Lesser General Public License for more details.
00074 
00075    You should have received a copy of the GNU Lesser General Public
00076    License along with this library; if not, write to the Free Software
00077    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00078 */
00079 
00080 #ifndef _GAN_REPEAT4_H
00081 #define _GAN_REPEAT4_H
00082 
00083 #ifdef __cplusplus
00084 extern "C" {
00085 #endif
00086 
00087 /* macros for constructing four-fold repetitions */
00088 #define GAN_REP4_AS(a,b,p1,p2,p3,p4) (a p1 b, a p2 b, a p3 b, a p4 b)
00089 #define GAN_REP4_AS_C(a,b) GAN_REP4_AS(a,b,x,y,z,w)
00090 #define GAN_REP4_A(a,p1,p2,p3,p4) (a p1, a p2, a p3, a p4)
00091 #define GAN_REP4_A_C(a) GAN_REP4_A(a,x,y,z,w)
00092 
00093 #define GAN_FREP4_A(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00094     (a p1 b q1, a p2 b q2,\
00095      a p3 b q3, a p4 b q4)
00096 #define GAN_FREP4_A_C(a,b,p1,p2,p3,p4) GAN_FREP4_A(a,b,x,y,z,w,p1,p2,p3,p4)
00097 
00098 #define GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4)\
00099            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c, a p4 b q4 c)
00100 #define GAN_REP4_AAS(a,b,c,p1,p2,p3,p4)\
00101            GAN_REP4_ABS(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4)
00102 #define GAN_REP4_AAS_C(a,b,c) GAN_REP4_AAS(a,b,c,x,y,z,w)
00103 
00104 #define GAN_REP4_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4)\
00105            (a p1 b q1, a p2 b q2, a p3 b q3, a p4 b q4)
00106 #define GAN_REP4_AA(a,b,p1,p2,p3,p4)\
00107            GAN_REP4_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4)
00108 #define GAN_REP4_AA_C(a,b) GAN_REP4_AA(a,b,x,y,z,w)
00109 
00110 #define GAN_REP4_ABCS(a,b,c,d,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00111      (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d, a p4 b q4 c r4 d)
00112 #define GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,q1,q2,q3,q4,r1,r2,r3,r4)\
00113      (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3, a p4 b q4 c r4)
00114 #define GAN_REP4_AAA(a,b,c,p1,p2,p3,p4)\
00115            GAN_REP4_ABC(a,b,c,p1,p2,p3,p4,p1,p2,p3,p4,p1,p2,p3,p4)
00116 #define GAN_REP4_AAA_C(a,b,c) GAN_REP4_AAA(a,b,c,x,y,z,w)
00117 
00118 #define GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,q1,q2,q3,q4,op)\
00119         (a p1 b q1 op a p2 b q2 op a p3 b q3 op a p4 b q4)
00120 #define GAN_REP4_OP_AA(a,b,p1,p2,p3,p4,op)\
00121            GAN_REP4_OP_AB(a,b,p1,p2,p3,p4,p1,p2,p3,p4,op)
00122 #define GAN_REP4_OP_AA_C(a,b,op) GAN_REP4_OP_AA(a,b,x,y,z,w,op)
00123 
00124 #ifdef __cplusplus
00125 }
00126 #endif
00127 
00128 #endif /* #ifndef _GAN_REPEAT4_H */
00129 
00130 #ifdef __cplusplus
00131 extern "C" {
00132 #endif
00133 
00134 /* macros for constructing dual two-fold repetitions */
00135 
00136 #define GAN_FREP34_A(a,b,p1,p2,p3,q1,q2,q3,q4,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34)\
00137             (GAN_FREP4_A(a,b,p1##q1,p1##q2,p1##q3,p1##q4,r11,r12,r13,r14),\
00138              GAN_FREP4_A(a,b,p2##q1,p2##q2,p2##q3,p2##q4,r21,r22,r23,r24),\
00139              GAN_FREP4_A(a,b,p3##q1,p3##q2,p3##q3,p3##q4,r31,r32,r33,r34))
00140 #define GAN_FREP34_A_C(a,b,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34)\
00141            GAN_FREP34_A(a,b,x,y,z,x,y,z,w,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34)
00142 
00143 /* most general macros */
00144 #define GAN_REP34_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,q4,r1,r2,r3,s1,s2,s3,s4,t1,t2,t3,u1,u2,u3,u4)\
00145  (GAN_REP4_ABCS(a,b,c,d,p1##q1,p1##q2,p1##q3,p1##q4,r1##s1,r1##s2,r1##s3,r1##s4,t1##u1,t1##u2,t1##u3,t1##u4),\
00146   GAN_REP4_ABCS(a,b,c,d,p2##q1,p2##q2,p2##q3,p2##q4,r2##s1,r2##s2,r2##s3,r2##s4,t2##u1,t2##u2,t2##u3,t2##u4),\
00147   GAN_REP4_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,p3##q4,r3##s1,r3##s2,r3##s3,r3##s4,t3##u1,t3##u2,t3##u3,t3##u4))
00148 #define GAN_REP34_ABC(a,b,c,p1,p2,p3,q1,q2,q3,q4,r1,r2,r3,s1,s2,s3,s4,t1,t2,t3,u1,u2,u3,u4)\
00149  (GAN_REP4_ABC(a,b,c,p1##q1,p1##q2,p1##q3,p1##q4,r1##s1,r1##s2,r1##s3,r1##s4,t1##u1,t1##u2,t1##u3,t1##u4),\
00150   GAN_REP4_ABC(a,b,c,p2##q1,p2##q2,p2##q3,p2##q4,r2##s1,r2##s2,r2##s3,r2##s4,t2##u1,t2##u2,t2##u3,t2##u4),\
00151   GAN_REP4_ABC(a,b,c,p3##q1,p3##q2,p3##q3,p3##q4,r3##s1,r3##s2,r3##s3,r3##s4,t3##u1,t3##u2,t3##u3,t3##u4))
00152 
00153 #define GAN_REP34_AAAS(a,b,c,d,p1,p2,p3,q1,q2,q3,q4)\
00154    GAN_REP34_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4)
00155 #define GAN_REP34_AAA(a,b,c,p1,p2,p3,q1,q2,q3,q4)\
00156    GAN_REP34_ABC(a,b,c,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4)
00157 #define GAN_REP34_ABS(a,b,c,p1,p2,p3,q1,q2,q3,q4,r1,r2,r3,s1,s2,s3,s4)\
00158  (GAN_REP4_ABS(a,b,c,p1##q1,p1##q2,p1##q3,p1##q4,r1##s1,r1##s2,r1##s3,r1##s4),\
00159   GAN_REP4_ABS(a,b,c,p2##q1,p2##q2,p2##q3,p2##q4,r2##s1,r2##s2,r2##s3,r2##s4),\
00160   GAN_REP4_ABS(a,b,c,p3##q1,p3##q2,p3##q3,p3##q4,r3##s1,r3##s2,r3##s3,r3##s4))
00161 #define GAN_REP34_AB(a,b,p1,p2,p3,q1,q2,q3,q4,r1,r2,r3,s1,s2,s3,s4)\
00162  (GAN_REP4_AB(a,b,p1##q1,p1##q2,p1##q3,p1##q4,r1##s1,r1##s2,r1##s3,r1##s4),\
00163   GAN_REP4_AB(a,b,p2##q1,p2##q2,p2##q3,p2##q4,r2##s1,r2##s2,r2##s3,r2##s4),\
00164   GAN_REP4_AB(a,b,p3##q1,p3##q2,p3##q3,p3##q4,r3##s1,r3##s2,r3##s3,r3##s4))
00165 #define GAN_REP34_AAS(a,b,c,p1,p2,p3,q1,q2,q3,q4)\
00166             GAN_REP34_ABS(a,b,c,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4)
00167 #define GAN_REP34_AA(a,b,p1,p2,p3,q1,q2,q3,q4)\
00168             GAN_REP34_AB(a,b,p1,p2,p3,q1,q2,q3,q4,p1,p2,p3,q1,q2,q3,q4)
00169 #define GAN_REP34_AS(a,b,p1,p2,p3,q1,q2,q3,q4)\
00170  (GAN_REP4_AS(a,b,p1##q1,p1##q2,p1##q3,p1##q4),\
00171   GAN_REP4_AS(a,b,p2##q1,p2##q2,p2##q3,p2##q4),\
00172   GAN_REP4_AS(a,b,p3##q1,p3##q2,p3##q3,p3##q4))
00173 #define GAN_REP34_A(a,p1,p2,p3,q1,q2,q3,q4)\
00174  (GAN_REP4_A(a,p1##q1,p1##q2,p1##q3,p1##q4),\
00175   GAN_REP4_A(a,p2##q1,p2##q2,p2##q3,p2##q4),\
00176   GAN_REP4_A(a,p3##q1,p3##q2,p3##q3,p3##q4))
00177 
00178 /* macros specific to xx, xy etc coordinates */
00179 #define GAN_REP34_AS_C(a,b) GAN_REP34_AS(a,b,x,y,z,x,y,z,w)
00180 #define GAN_REP34_AAS_C(a,b,c) GAN_REP34_AAS(a,b,c,x,y,z,x,y,z,w)
00181 #define GAN_REP34_AAAS_C(a,b,c,d) GAN_REP34_AAAS(a,b,c,d,x,y,z,x,y,z,w)
00182 #define GAN_REP34_A_C(a) GAN_REP34_A(a,x,y,z,x,y,z,w)
00183 #define GAN_REP34_AA_C(a,b) GAN_REP34_AA(a,b,x,y,z,x,y,z,w)
00184 #define GAN_REP34_AAA_C(a,b,c) GAN_REP34_AAA(a,b,c,x,y,z,x,y,z,w)
00185 
00186 #ifdef __cplusplus
00187 }
00188 #endif
00189 
00190 #endif /* #ifndef _GAN_REPEAT34_H */
00191 #include <gandalf/linalg/3vectorf.h>
00192 #include <gandalf/linalg/4vectorf.h>
00193 #include <gandalf/linalg/3x3matrixf.h>
00194 #include <gandalf/linalg/4x4matrixf.h>
00208 /* This library is free software; you can redistribute it and/or
00209    modify it under the terms of the GNU Lesser General Public
00210    License as published by the Free Software Foundation; either
00211    version 2.1 of the License, or (at your option) any later version.
00212 
00213    This library is distributed in the hope that it will be useful,
00214    but WITHOUT ANY WARRANTY; without even the implied warranty of
00215    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00216    Lesser General Public License for more details.
00217 
00218    You should have received a copy of the GNU Lesser General Public
00219    License along with this library; if not, write to the Free Software
00220    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00221 */
00222 
00223 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00224 #include <gandalf/linalg/matf_gen.h>
00225 
00226 #ifdef __cplusplus
00227 extern "C" {
00228 #endif
00229 
00245 
00246 typedef struct Gan_Matrix34_f
00247 {
00248    float xx, xy, xz, xw,
00249          yx, yy, yz, yw,
00250          zx, zy, zz, zw;
00251 } Gan_Matrix34_f;
00252 
00253 /* generic matrix multiply operations */
00254 #define GAN_MAT34F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3,q4)\
00255  (a p1 = GAN_REP4_OP_AB(b,* c,xx,xy,xz,xw,q1,q2,q3,q4,+),\
00256   a p2 = GAN_REP4_OP_AB(b,* c,yx,yy,yz,yw,q1,q2,q3,q4,+),\
00257   a p3 = GAN_REP4_OP_AB(b,* c,zx,zy,zz,zw,q1,q2,q3,q4,+))
00258 #define GAN_MAT34TF_MULT1D(a,b,c,p1,p2,p3,p4,q1,q2,q3)\
00259  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00260   a p2 = GAN_REP3_OP_AB(b,* c,xy,yy,zy,q1,q2,q3,+),\
00261   a p3 = GAN_REP3_OP_AB(b,* c,xz,yz,zz,q1,q2,q3,+),\
00262   a p4 = GAN_REP3_OP_AB(b,* c,xw,yw,zw,q1,q2,q3,+))
00263 
00264 /* declare functions specific to 2x3 matrices */
00278 /* This library is free software; you can redistribute it and/or
00279    modify it under the terms of the GNU Lesser General Public
00280    License as published by the Free Software Foundation; either
00281    version 2.1 of the License, or (at your option) any later version.
00282 
00283    This library is distributed in the hope that it will be useful,
00284    but WITHOUT ANY WARRANTY; without even the implied warranty of
00285    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00286    Lesser General Public License for more details.
00287 
00288    You should have received a copy of the GNU Lesser General Public
00289    License along with this library; if not, write to the Free Software
00290    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00291 */
00292 
00293 #ifndef _GAN_3X4MATF_H
00294 
00311  Gan_Matrix34_f *gan_mat34f_fill_q ( Gan_Matrix34_f *A,
00312                                     float XX, float XY, float XZ, float XW,
00313                                     float YX, float YY, float YZ, float YW,
00314                                     float ZX, float ZY, float ZZ, float ZW );
00315 
00336  Gan_Matrix33_f *gan_mat34f_rmultm34T_q ( const Gan_Matrix34_f *A, const Gan_Matrix34_f *B,
00337                                          Gan_Matrix33_f *C );
00338 
00360  Gan_Vector3_f *gan_mat34_multv3h_q ( const Gan_Matrix34_f *A, const Gan_Vector3_f *p,
00361                                      float h, Gan_Vector3_f *q );
00362 
00384  void gan_mat34f_get_rows_q ( const Gan_Matrix34_f *A,
00385                              Gan_Vector4_f *p, Gan_Vector4_f *q,
00386                              Gan_Vector4_f *r );
00387 
00399  void gan_mat34f_get_cols_q ( const Gan_Matrix34_f *A,
00400                              Gan_Vector3_f *p, Gan_Vector3_f *q,
00401                              Gan_Vector3_f *r, Gan_Vector3_f *s );
00402 
00410  Gan_Matrix33_f *gan_mat34f_get_m33l_q ( const Gan_Matrix34_f *A, Gan_Matrix33_f *B );
00411 
00419  Gan_Vector3_f *gan_mat34f_get_v3r_q ( const Gan_Matrix34_f *A, Gan_Vector3_f *p );
00420 
00442  Gan_Matrix34_f *gan_mat34f_set_parts_q ( Gan_Matrix34_f *A,
00443                                          const Gan_Matrix33_f *B, const Gan_Vector3_f *p );
00444 
00456  Gan_Matrix34_f *gan_mat34f_set_cols_q ( Gan_Matrix34_f *A,
00457                                         const Gan_Vector3_f *p, const Gan_Vector3_f *q,
00458                                         const Gan_Vector3_f *r, const Gan_Vector3_f *s );
00459 
00472  Gan_Matrix34_f *gan_mat34f_set_rows_q ( Gan_Matrix34_f *A,
00473                                         const Gan_Vector4_f *p, const Gan_Vector4_f *q,
00474                                         const Gan_Vector4_f *r );
00475 
00481 #endif /* #ifndef _GAN_3X4MATF_H */
00482 
00483 #define GAN_MATTYPE Gan_Matrix34_f
00484 #define GAN_MATRIX_TYPE Gan_Matrix_f
00485 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00486 #define GAN_VECTOR_TYPE Gan_Vector_f
00487 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00488 #define GAN_REALTYPE float
00489 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
00490 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
00491 #define GAN_VECTYPE1 Gan_Vector3_f
00492 #define GAN_VECTYPE2 Gan_Vector4_f
00493 #define GAN_MATTYPEL Gan_Matrix33_f
00494 #define GAN_MATTYPER Gan_Matrix44_f
00495 #define GAN_SQUMATTYPEL Gan_SquMatrix33_f
00496 #define GAN_SQUMATTYPER Gan_SquMatrix44_f
00497 #define GAN_MAT_FPRINT                     gan_mat34f_fprint
00498 #define GAN_MAT_PRINT                      gan_mat34f_print
00499 #define GAN_MAT_FSCANF                     gan_mat34f_fscanf
00500 #define GAN_MAT_FWRITE                     gan_mat34f_fwrite
00501 #define GAN_MAT_FREAD                      gan_mat34f_fread
00502 #define GAN_MAT_ZERO_Q                     gan_mat34f_zero_q
00503 #define GAN_MAT_ZERO_S                     gan_mat34f_zero_s
00504 #define GAN_MAT_COPY_Q                     gan_mat34f_copy_q
00505 #define GAN_MAT_COPY_S                     gan_mat34f_copy_s
00506 #define GAN_MAT_SCALE_Q                    gan_mat34f_scale_q
00507 #define GAN_MAT_SCALE_I                    gan_mat34f_scale_i
00508 #define GAN_MAT_SCALE_S                    gan_mat34f_scale_s
00509 #define GAN_MAT_DIVIDE_Q                   gan_mat34f_divide_q
00510 #define GAN_MAT_DIVIDE_I                   gan_mat34f_divide_i
00511 #define GAN_MAT_DIVIDE_S                   gan_mat34f_divide_s
00512 #define GAN_MAT_NEGATE_Q                   gan_mat34f_negate_q
00513 #define GAN_MAT_NEGATE_I                   gan_mat34f_negate_i
00514 #define GAN_MAT_NEGATE_S                   gan_mat34f_negate_s
00515 #define GAN_MAT_UNIT_Q                     gan_mat34f_unit_q
00516 #define GAN_MAT_UNIT_I                     gan_mat34f_unit_i
00517 #define GAN_MAT_UNIT_S                     gan_mat34f_unit_s
00518 #define GAN_MAT_ADD_Q                      gan_mat34f_add_q
00519 #define GAN_MAT_ADD_I1                     gan_mat34f_add_i1
00520 #define GAN_MAT_ADD_I2                     gan_mat34f_add_i2
00521 #define GAN_MAT_INCREMENT                  gan_mat34f_increment
00522 #define GAN_MAT_ADD_S                      gan_mat34f_add_s
00523 #define GAN_MAT_SUB_Q                      gan_mat34f_sub_q
00524 #define GAN_MAT_SUB_I1                     gan_mat34f_sub_i1
00525 #define GAN_MAT_SUB_I2                     gan_mat34f_sub_i2
00526 #define GAN_MAT_DECREMENT                  gan_mat34f_decrement
00527 #define GAN_MAT_SUB_S                      gan_mat34f_sub_s
00528 #define GAN_VEC_OUTER_Q                    gan_vec34f_outer_q
00529 #define GAN_VEC_OUTER_S                    gan_vec34f_outer_s
00530 #define GAN_MAT_MULTV_Q                    gan_mat34f_multv4_q
00531 #define GAN_MAT_MULTV_S                    gan_mat34f_multv4_s
00532 #define GAN_MATT_MULTV_Q                   gan_mat34Tf_multv2_q
00533 #define GAN_MATT_MULTV_S                   gan_mat34Tf_multv2_s
00534 #define GAN_MAT_LMULTM_Q                   gan_mat34f_lmultm33_q
00535 #define GAN_MAT_LMULTM_S                   gan_mat34f_lmultm33_s
00536 #define GAN_MAT_LMULTMT_Q                  gan_mat34f_lmultm33T_q
00537 #define GAN_MAT_LMULTMT_S                  gan_mat34f_lmultm33T_s
00538 #define GAN_MAT_RMULTM_Q                   gan_mat34f_rmultm44_q
00539 #define GAN_MAT_RMULTM_S                   gan_mat34f_rmultm44_s
00540 #define GAN_MAT_RMULTMT_Q                  gan_mat34f_rmultm44T_q
00541 #define GAN_MAT_RMULTMT_S                  gan_mat34f_rmultm44T_s
00542 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat34f_lmultm34T_sym_q
00543 #define GAN_MAT_LMULTMT_SYM_S              gan_mat34f_lmultm34T_sym_s
00544 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat34f_rmultm34T_sym_q
00545 #define GAN_MAT_RMULTMT_SYM_S              gan_mat34f_rmultm34T_sym_s
00546 #define GAN_MAT_SLMULTT_Q                  gan_mat34f_slmultT_q
00547 #define GAN_MAT_SLMULTT_S                  gan_mat34f_slmultT_s
00548 #define GAN_MAT_SRMULTT_Q                  gan_mat34f_srmultT_q
00549 #define GAN_MAT_SRMULTT_S                  gan_mat34f_srmultT_s
00550 #define GAN_MAT_LMULTS_Q                   gan_mat34f_lmults33_q
00551 #define GAN_MAT_LMULTS_S                   gan_mat34f_lmults33_s
00552 #define GAN_MAT_RMULTS_Q                   gan_mat34f_rmults44_q
00553 #define GAN_MAT_RMULTS_S                   gan_mat34f_rmults44_s
00554 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33f_lrmultm34T_q
00555 #define GAN_SYMMATL_LRMULT_S               gan_symmat33f_lrmultm34T_s
00556 #define GAN_SYMMATR_LRMULT_Q               gan_symmat44f_lrmultm34_q
00557 #define GAN_SYMMATR_LRMULT_S               gan_symmat44f_lrmultm34_s
00558 #define GAN_MAT_LMULTL_Q                   gan_mat34f_lmultl33_q
00559 #define GAN_MAT_LMULTL_S                   gan_mat34f_lmultl33_s
00560 #define GAN_MAT_LMULTL_I                   gan_mat34f_lmultl33_i
00561 #define GAN_MAT_LMULTLI_Q                  gan_mat34f_lmultl33I_q
00562 #define GAN_MAT_LMULTLI_S                  gan_mat34f_lmultl33I_s
00563 #define GAN_MAT_LMULTLI_I                  gan_mat34f_lmultl33I_i
00564 #define GAN_MAT_LMULTLT_Q                  gan_mat34f_lmultl33T_q
00565 #define GAN_MAT_LMULTLT_S                  gan_mat34f_lmultl33T_s
00566 #define GAN_MAT_LMULTLT_I                  gan_mat34f_lmultl33T_i
00567 #define GAN_MAT_LMULTLIT_Q                 gan_mat34f_lmultl33IT_q
00568 #define GAN_MAT_LMULTLIT_S                 gan_mat34f_lmultl33IT_s
00569 #define GAN_MAT_LMULTLIT_I                 gan_mat34f_lmultl33IT_i
00570 #define GAN_MAT_RMULTL_Q                   gan_mat34f_rmultl44_q
00571 #define GAN_MAT_RMULTL_S                   gan_mat34f_rmultl44_s
00572 #define GAN_MAT_RMULTL_I                   gan_mat34f_rmultl44_i
00573 #define GAN_MAT_RMULTLI_Q                  gan_mat34f_rmultl44I_q
00574 #define GAN_MAT_RMULTLI_S                  gan_mat34f_rmultl44I_s
00575 #define GAN_MAT_RMULTLI_I                  gan_mat34f_rmultl44I_i
00576 #define GAN_MAT_RMULTLT_Q                  gan_mat34f_rmultl44T_q
00577 #define GAN_MAT_RMULTLT_S                  gan_mat34f_rmultl44T_s
00578 #define GAN_MAT_RMULTLT_I                  gan_mat34f_rmultl44T_i
00579 #define GAN_MAT_RMULTLIT_Q                 gan_mat34f_rmultl44IT_q
00580 #define GAN_MAT_RMULTLIT_S                 gan_mat34f_rmultl44IT_s
00581 #define GAN_MAT_RMULTLIT_I                 gan_mat34f_rmultl44IT_i
00582 #define GAN_MAT_SUMSQR_Q                   gan_mat34f_sumsqr_q
00583 #define GAN_MAT_SUMSQR_S                   gan_mat34f_sumsqr_s
00584 #define GAN_MAT_FNORM_Q                    gan_mat34f_Fnorm_q
00585 #define GAN_MAT_FNORM_S                    gan_mat34f_Fnorm_s
00586 #define GAN_MAT_FROM_MAT_Q                 gan_mat34f_from_matf_q
00587 #define GAN_MAT_FROM_MAT_S                 gan_mat34f_from_matf_s
00588 
00589 #ifndef _GAN_3X4MATF_H
00590 #define _GAN_3X4MATF_H
00591 
00592 
00593 #endif /* #ifndef _GAN_3X4MATF_H */
00594 
00607 /* This library is free software; you can redistribute it and/or
00608    modify it under the terms of the GNU Lesser General Public
00609    License as published by the Free Software Foundation; either
00610    version 2.1 of the License, or (at your option) any later version.
00611 
00612    This library is distributed in the hope that it will be useful,
00613    but WITHOUT ANY WARRANTY; without even the implied warranty of
00614    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00615    Lesser General Public License for more details.
00616 
00617    You should have received a copy of the GNU Lesser General Public
00618    License along with this library; if not, write to the Free Software
00619    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00620 */
00621 
00622 /* function declarations for functions common to all small vector types */
00623 
00624 
00625 
00626 /* documentation for macros defined in individual header files */
00627 
00638  Gan_Matrix34_f *gan_mat34f_zero_q ( const Gan_Matrix34_f *A );
00639 
00656  Gan_Matrix34_f *gan_mat34f_copy_q ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00657 
00675  Gan_Matrix34_f *gan_mat34f_scale_q ( Gan_Matrix34_f *A, float a,
00676                                Gan_Matrix34_f *B );
00677 
00685  Gan_Matrix34_f *gan_mat34f_scale_i ( Gan_Matrix34_f *A, float a );
00686 
00695  Gan_Matrix34_f *gan_mat34f_divide_q ( Gan_Matrix34_f *A, float a,
00696                                 Gan_Matrix34_f *B );
00697 
00705  Gan_Matrix34_f *gan_mat34f_divide_i ( Gan_Matrix34_f *A, float a );
00706 
00714  Gan_Matrix34_f *gan_mat34f_negate_q ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00715 
00723  Gan_Matrix34_f *gan_mat34f_negate_i ( Gan_Matrix34_f *A );
00724 
00732  Gan_Matrix34_f *gan_mat34f_unit_i ( Gan_Matrix34_f *A );
00733 
00751  Gan_Matrix34_f *gan_mat34f_add_q ( Gan_Matrix34_f *A, Gan_Matrix34_f *B, Gan_Matrix34_f *C );
00752 
00761  Gan_Matrix34_f *gan_mat34f_add_i1 ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00762 
00771  Gan_Matrix34_f *gan_mat34f_add_i2 ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00772 
00781  Gan_Matrix34_f *gan_mat34f_increment ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00782 
00800  Gan_Matrix34_f *gan_mat34f_sub_q ( Gan_Matrix34_f *A, Gan_Matrix34_f *B, Gan_Matrix34_f *C );
00801 
00810  Gan_Matrix34_f *gan_mat34f_sub_i1 ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00811 
00820  Gan_Matrix34_f *gan_mat34f_sub_i2 ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00821 
00830  Gan_Matrix34_f *gan_mat34f_decrement ( Gan_Matrix34_f *A, Gan_Matrix34_f *B );
00831 
00849  Gan_Matrix34_f *gan_vec34f_outer_q ( const Gan_Vector3_f *p, const Gan_Vector4_f *q,
00850                                Gan_Matrix34_f *A );
00851 
00860  Gan_Vector3_f *gan_mat34f_multv4_q ( const Gan_Matrix34_f *A, Gan_Vector4_f *p,
00861                                 Gan_Vector3_f *q );
00862 
00863 
00872  Gan_Vector4_f *gan_mat34Tf_multv2_q ( const Gan_Matrix34_f *A, Gan_Vector3_f *p,
00873                                  Gan_Vector4_f *q );
00874 
00875 
00894  Gan_Matrix34_f *gan_mat34f_lmultm33_q ( Gan_Matrix34_f *A, const Gan_Matrix33_f *B,
00895                                 Gan_Matrix34_f *C );
00896 
00906  Gan_Matrix34_f *gan_mat34f_lmultm33T_q ( Gan_Matrix34_f *A, const Gan_Matrix33_f *B,
00907                                  Gan_Matrix34_f *C );
00908 
00918  Gan_Matrix34_f *gan_mat34f_rmultm44_q ( Gan_Matrix34_f *A, const Gan_Matrix44_f *B,
00919                                 Gan_Matrix34_f *C );
00920 
00930  Gan_Matrix34_f *gan_mat34f_rmultm44T_q ( Gan_Matrix34_f *A, const Gan_Matrix44_f *B,
00931                                  Gan_Matrix34_f *C );
00932 
00944  Gan_SquMatrix44_f *gan_mat34f_lmultm34T_sym_q ( const Gan_Matrix34_f *A, const Gan_Matrix34_f *B,
00945                                          Gan_SquMatrix44_f *C );
00946 
00958  Gan_SquMatrix33_f *gan_mat34f_rmultm34T_sym_q ( const Gan_Matrix34_f *A, const Gan_Matrix34_f *B,
00959                                          Gan_SquMatrix33_f *C );
00960 
00969  Gan_Matrix34_f *gan_mat34f_lmults33_q ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B,
00970                                 Gan_Matrix34_f *C );
00971 
00980  Gan_Matrix34_f *gan_mat34f_rmults44_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B,
00981                                 Gan_Matrix34_f *C );
00982 
01002  Gan_SquMatrix44_f *gan_symmat33f_lrmultm34T_q ( const Gan_SquMatrix33_f *A, const Gan_Matrix34_f *B,
01003                                         const Gan_Matrix34_f *C, Gan_SquMatrix44_f *D );
01004 
01015  Gan_SquMatrix33_f *gan_symmat44f_lrmultm34_q ( const Gan_SquMatrix44_f *A, const Gan_Matrix34_f *B,
01016                                         const Gan_Matrix34_f *C, Gan_SquMatrix33_f *D );
01017 
01036  Gan_Matrix34_f *gan_mat34f_lmultl33_q ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B,
01037                                 Gan_Matrix34_f *C );
01038 
01048  Gan_Matrix34_f *gan_mat34f_lmultl33I_q ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B,
01049                                  Gan_Matrix34_f *C );
01050 
01060  Gan_Matrix34_f *gan_mat34f_lmultl33T_q ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B,
01061                                  Gan_Matrix34_f *C );
01062 
01072  Gan_Matrix34_f *gan_mat34f_lmultl33IT_q ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B,
01073                                   Gan_Matrix34_f *C );
01074 
01084  Gan_Matrix34_f *gan_mat34f_rmultl44_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B,
01085                                 Gan_Matrix34_f *C );
01086 
01096  Gan_Matrix34_f *gan_mat34f_rmultl44I_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B,
01097                                  Gan_Matrix34_f *C );
01098 
01108  Gan_Matrix34_f *gan_mat34f_rmultl44T_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B,
01109                                  Gan_Matrix34_f *C );
01110 
01120  Gan_Matrix34_f *gan_mat34f_rmultl44IT_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B,
01121                                   Gan_Matrix34_f *C );
01122 
01132  Gan_Matrix34_f *gan_mat34f_lmultl33_i ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B );
01133 
01143  Gan_Matrix34_f *gan_mat34f_lmultl33I_i ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B );
01144 
01154  Gan_Matrix34_f *gan_mat34f_lmultl33T_i ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B );
01155 
01165  Gan_Matrix34_f *gan_mat34f_lmultl33IT_i ( Gan_Matrix34_f *A, const Gan_SquMatrix33_f *B );
01166 
01176  Gan_Matrix34_f *gan_mat34f_rmultl44_i ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B );
01177 
01187  Gan_Matrix34_f *gan_mat34f_rmultl44I_i ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B );
01188 
01198  Gan_Matrix34_f *gan_mat34f_rmultl44T_i ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B );
01199 
01209  Gan_Matrix34_f *gan_mat34f_rmultl44IT_i ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B );
01210 
01219  Gan_SquMatrix44_f *gan_mat34f_slmultT_q ( Gan_Matrix34_f *A, const Gan_SquMatrix44_f *B );
01220 
01221 
01230  Gan_SquMatrix33_f *gan_mat34f_srmultT_q ( const Gan_Matrix34_f *A, Gan_SquMatrix33_f *B );
01231 
01232 
01247  float gan_mat34f_sumsqr_q ( const Gan_Matrix34_f *A );
01248 
01255  float gan_mat34f_Fnorm_q ( const Gan_Matrix34_f *A );
01256 
01266  Gan_Matrix34_f *gan_mat34f_from_matf_q ( const Gan_Matrix_f *A, Gan_Matrix34_f *B );
01267 
01268 
01269 
01288 /* This library is free software; you can redistribute it and/or
01289    modify it under the terms of the GNU Lesser General Public
01290    License as published by the Free Software Foundation; either
01291    version 2.1 of the License, or (at your option) any later version.
01292 
01293    This library is distributed in the hope that it will be useful,
01294    but WITHOUT ANY WARRANTY; without even the implied warranty of
01295    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01296    Lesser General Public License for more details.
01297 
01298    You should have received a copy of the GNU Lesser General Public
01299    License along with this library; if not, write to the Free Software
01300    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01301 */
01302 
01303 #undef GAN_MATTYPE
01304 #undef GAN_MATRIX_TYPE
01305 #undef GAN_SQUMATRIX_TYPE
01306 #undef GAN_VECTOR_TYPE
01307 #undef GAN_MAT_ELEMENT_TYPE
01308 #undef GAN_REALTYPE
01309 #undef GAN_FWRITE_LENDIAN
01310 #undef GAN_FREAD_LENDIAN
01311 #undef GAN_VECTYPE1
01312 #undef GAN_VECTYPE2
01313 #undef GAN_MATTYPEL
01314 #undef GAN_MATTYPER
01315 #undef GAN_SQUMATTYPEL
01316 #undef GAN_SQUMATTYPER
01317 #undef GAN_FIXED_MATRIX_TYPE
01318 #undef GAN_MAT_FPRINT
01319 #undef GAN_MAT_PRINT
01320 #undef GAN_MAT_FSCANF
01321 #undef GAN_MAT_FWRITE
01322 #undef GAN_MAT_FREAD
01323 #undef GAN_MAT_ZERO_Q
01324 #undef GAN_MAT_ZERO_S
01325 #undef GAN_MAT_COPY_Q
01326 #undef GAN_MAT_COPY_S
01327 #undef GAN_MAT_SCALE_Q
01328 #undef GAN_MAT_SCALE_S
01329 #undef GAN_MAT_SCALE_I
01330 #undef GAN_MAT_DIVIDE_Q
01331 #undef GAN_MAT_DIVIDE_S
01332 #undef GAN_MAT_DIVIDE_I
01333 #undef GAN_MAT_NEGATE_Q
01334 #undef GAN_MAT_NEGATE_S
01335 #undef GAN_MAT_NEGATE_I
01336 #undef GAN_MAT_UNIT_Q
01337 #undef GAN_MAT_UNIT_S
01338 #undef GAN_MAT_UNIT_I
01339 #undef GAN_MAT_ADD_Q
01340 #undef GAN_MAT_ADD_I1
01341 #undef GAN_MAT_ADD_I2
01342 #undef GAN_MAT_INCREMENT
01343 #undef GAN_MAT_ADD_S
01344 #undef GAN_MAT_SUB_Q
01345 #undef GAN_MAT_SUB_I1
01346 #undef GAN_MAT_SUB_I2
01347 #undef GAN_MAT_DECREMENT
01348 #undef GAN_MAT_SUB_S
01349 #undef GAN_VEC_OUTER_Q
01350 #undef GAN_VEC_OUTER_S
01351 #undef GAN_MAT_MULTV_Q
01352 #undef GAN_MAT_MULTV_S
01353 #undef GAN_MAT_MULTV_I
01354 #undef GAN_MATT_MULTV_Q
01355 #undef GAN_MATT_MULTV_S
01356 #undef GAN_MATT_MULTV_I
01357 #undef GAN_MAT_LMULTM_Q
01358 #undef GAN_MAT_LMULTM_S
01359 #undef GAN_MAT_LMULTMT_Q
01360 #undef GAN_MAT_LMULTMT_S
01361 #undef GAN_MAT_RMULTM_Q
01362 #undef GAN_MAT_RMULTM_S
01363 #undef GAN_MAT_RMULTMT_Q
01364 #undef GAN_MAT_RMULTMT_S
01365 #undef GAN_MAT_LMULTMT_SYM_Q
01366 #undef GAN_MAT_LMULTMT_SYM_S
01367 #undef GAN_MAT_RMULTMT_SYM_Q
01368 #undef GAN_MAT_RMULTMT_SYM_S
01369 #undef GAN_MAT_LMULTS_Q
01370 #undef GAN_MAT_LMULTS_S
01371 #undef GAN_MAT_RMULTS_Q
01372 #undef GAN_MAT_RMULTS_S
01373 #undef GAN_SYMMATL_LRMULT_Q
01374 #undef GAN_SYMMATL_LRMULT_S
01375 #undef GAN_SYMMATR_LRMULT_Q
01376 #undef GAN_SYMMATR_LRMULT_S
01377 #undef GAN_MAT_LMULTL_Q
01378 #undef GAN_MAT_LMULTL_S
01379 #undef GAN_MAT_LMULTL_I
01380 #undef GAN_MAT_LMULTLI_Q
01381 #undef GAN_MAT_LMULTLI_S
01382 #undef GAN_MAT_LMULTLI_I
01383 #undef GAN_MAT_LMULTLT_Q
01384 #undef GAN_MAT_LMULTLT_S
01385 #undef GAN_MAT_LMULTLT_I
01386 #undef GAN_MAT_LMULTLIT_Q
01387 #undef GAN_MAT_LMULTLIT_S
01388 #undef GAN_MAT_LMULTLIT_I
01389 #undef GAN_MAT_RMULTL_Q
01390 #undef GAN_MAT_RMULTL_S
01391 #undef GAN_MAT_RMULTL_I
01392 #undef GAN_MAT_RMULTLI_Q
01393 #undef GAN_MAT_RMULTLI_S
01394 #undef GAN_MAT_RMULTLI_I
01395 #undef GAN_MAT_RMULTLT_Q
01396 #undef GAN_MAT_RMULTLT_S
01397 #undef GAN_MAT_RMULTLT_I
01398 #undef GAN_MAT_RMULTLIT_Q
01399 #undef GAN_MAT_RMULTLIT_S
01400 #undef GAN_MAT_RMULTLIT_I
01401 #undef GAN_MAT_SRMULTT_Q
01402 #undef GAN_MAT_SRMULTT_S
01403 #undef GAN_MAT_SRMULTT_I
01404 #undef GAN_MAT_SLMULTT_Q
01405 #undef GAN_MAT_SLMULTT_S
01406 #undef GAN_MAT_SLMULTT_I
01407 #undef GAN_MAT_RMULTLIT_S
01408 #undef GAN_MAT_SUMSQR_Q
01409 #undef GAN_MAT_SUMSQR_S
01410 #undef GAN_MAT_FNORM_Q
01411 #undef GAN_MAT_FNORM_S
01412 #undef GAN_MAT_FROM_MAT_Q
01413 #undef GAN_MAT_FROM_MAT_S
01414 #undef GAN_MAT_FROM_SQUMAT_Q
01415 #undef GAN_MAT_FROM_SQUMAT_S
01416 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01417 #undef GAN_SQUMAT_FROM_SQUMAT_S
01418 
01431 #ifdef __cplusplus
01432 }
01433 #endif
01434 
01435 #endif /* #ifndef _GAN_3X4MATRIXF_H */

Generated on Fri Mar 17 12:44:46 2006 by  doxygen 1.3.9.1