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

3x4matrix.h

Go to the documentation of this file.
00001 
00014 #ifndef _GAN_3X4MATRIX_H
00015 #define _GAN_3X4MATRIX_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/3vector.h>
00192 #include <gandalf/linalg/4vector.h>
00193 #include <gandalf/linalg/3x3matrix.h>
00194 #include <gandalf/linalg/4x4matrix.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/mat_gen.h>
00225 
00226 #ifdef __cplusplus
00227 extern "C" {
00228 #endif
00229 
00245 
00246 typedef struct Gan_Matrix34
00247 {
00248    double xx, xy, xz, xw,
00249           yx, yy, yz, yw,
00250           zx, zy, zz, zw;
00251 } Gan_Matrix34;
00252 
00253 /* generic matrix multiply operations */
00254 #define GAN_MAT34_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_MAT34T_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_3X4MAT_H
00294 
00311  Gan_Matrix34 *gan_mat34_fill_q ( Gan_Matrix34 *A,
00312                                  double XX, double XY, double XZ, double XW,
00313                                  double YX, double YY, double YZ, double YW,
00314                                  double ZX, double ZY, double ZZ, double ZW );
00315 
00336  Gan_Matrix33 *gan_mat34_rmultm34T_q ( const Gan_Matrix34 *A, const Gan_Matrix34 *B,
00337                                       Gan_Matrix33 *C );
00338 
00360  Gan_Vector3 *gan_mat34_multv3h_q ( const Gan_Matrix34 *A, const Gan_Vector3 *p, double h,
00361                                    Gan_Vector3 *q );
00362 
00384  void gan_mat34_get_rows_q ( const Gan_Matrix34 *A,
00385                             Gan_Vector4 *p, Gan_Vector4 *q, Gan_Vector4 *r );
00386 
00398  void gan_mat34_get_cols_q ( const Gan_Matrix34 *A, Gan_Vector3 *p, Gan_Vector3 *q,
00399                                                    Gan_Vector3 *r, Gan_Vector3 *s );
00400 
00408  Gan_Matrix33 *gan_mat34_get_m33l_q ( const Gan_Matrix34 *A, Gan_Matrix33 *B );
00409 
00417  Gan_Vector3 *gan_mat34_get_v3r_q ( const Gan_Matrix34 *A, Gan_Vector3 *p );
00418 
00440  Gan_Matrix34 *gan_mat34_set_parts_q ( Gan_Matrix34 *A,
00441                                       const Gan_Matrix33 *B, const Gan_Vector3 *p );
00442 
00454  Gan_Matrix34 *gan_mat34_set_cols_q ( Gan_Matrix34 *A,
00455                                      const Gan_Vector3 *p, const Gan_Vector3 *q,
00456                                      const Gan_Vector3 *r, const Gan_Vector3 *s );
00457 
00470  Gan_Matrix34 *gan_mat34_set_rows_q ( Gan_Matrix34 *A,
00471                                      const Gan_Vector4 *p, const Gan_Vector4 *q,
00472                                      const Gan_Vector4 *r );
00473 
00479 #endif /* #ifndef _GAN_3X4MAT_H */
00480 
00481 #define GAN_MATTYPE Gan_Matrix34
00482 #define GAN_MATRIX_TYPE Gan_Matrix
00483 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
00484 #define GAN_VECTOR_TYPE Gan_Vector
00485 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
00486 #define GAN_REALTYPE double
00487 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64
00488 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f64
00489 #define GAN_VECTYPE1 Gan_Vector3
00490 #define GAN_VECTYPE2 Gan_Vector4
00491 #define GAN_MATTYPEL Gan_Matrix33
00492 #define GAN_MATTYPER Gan_Matrix44
00493 #define GAN_SQUMATTYPEL Gan_SquMatrix33
00494 #define GAN_SQUMATTYPER Gan_SquMatrix44
00495 #define GAN_MAT_FPRINT                     gan_mat34_fprint
00496 #define GAN_MAT_PRINT                      gan_mat34_print
00497 #define GAN_MAT_FSCANF                     gan_mat34_fscanf
00498 #define GAN_MAT_FWRITE                     gan_mat34_fwrite
00499 #define GAN_MAT_FREAD                      gan_mat34_fread
00500 #define GAN_MAT_ZERO_Q                     gan_mat34_zero_q
00501 #define GAN_MAT_ZERO_S                     gan_mat34_zero_s
00502 #define GAN_MAT_COPY_Q                     gan_mat34_copy_q
00503 #define GAN_MAT_COPY_S                     gan_mat34_copy_s
00504 #define GAN_MAT_SCALE_Q                    gan_mat34_scale_q
00505 #define GAN_MAT_SCALE_I                    gan_mat34_scale_i
00506 #define GAN_MAT_SCALE_S                    gan_mat34_scale_s
00507 #define GAN_MAT_DIVIDE_Q                   gan_mat34_divide_q
00508 #define GAN_MAT_DIVIDE_I                   gan_mat34_divide_i
00509 #define GAN_MAT_DIVIDE_S                   gan_mat34_divide_s
00510 #define GAN_MAT_NEGATE_Q                   gan_mat34_negate_q
00511 #define GAN_MAT_NEGATE_I                   gan_mat34_negate_i
00512 #define GAN_MAT_NEGATE_S                   gan_mat34_negate_s
00513 #define GAN_MAT_UNIT_Q                     gan_mat34_unit_q
00514 #define GAN_MAT_UNIT_I                     gan_mat34_unit_i
00515 #define GAN_MAT_UNIT_S                     gan_mat34_unit_s
00516 #define GAN_MAT_ADD_Q                      gan_mat34_add_q
00517 #define GAN_MAT_ADD_I1                     gan_mat34_add_i1
00518 #define GAN_MAT_ADD_I2                     gan_mat34_add_i2
00519 #define GAN_MAT_INCREMENT                  gan_mat34_increment
00520 #define GAN_MAT_ADD_S                      gan_mat34_add_s
00521 #define GAN_MAT_SUB_Q                      gan_mat34_sub_q
00522 #define GAN_MAT_SUB_I1                     gan_mat34_sub_i1
00523 #define GAN_MAT_SUB_I2                     gan_mat34_sub_i2
00524 #define GAN_MAT_DECREMENT                  gan_mat34_decrement
00525 #define GAN_MAT_SUB_S                      gan_mat34_sub_s
00526 #define GAN_VEC_OUTER_Q                    gan_vec34_outer_q
00527 #define GAN_VEC_OUTER_S                    gan_vec34_outer_s
00528 #define GAN_MAT_MULTV_Q                    gan_mat34_multv4_q
00529 #define GAN_MAT_MULTV_S                    gan_mat34_multv4_s
00530 #define GAN_MATT_MULTV_Q                   gan_mat34T_multv3_q
00531 #define GAN_MATT_MULTV_S                   gan_mat34T_multv3_s
00532 #define GAN_MAT_LMULTM_Q                   gan_mat34_lmultm33_q
00533 #define GAN_MAT_LMULTM_S                   gan_mat34_lmultm33_s
00534 #define GAN_MAT_LMULTMT_Q                  gan_mat34_lmultm33T_q
00535 #define GAN_MAT_LMULTMT_S                  gan_mat34_lmultm33T_s
00536 #define GAN_MAT_RMULTM_Q                   gan_mat34_rmultm44_q
00537 #define GAN_MAT_RMULTM_S                   gan_mat34_rmultm44_s
00538 #define GAN_MAT_RMULTMT_Q                  gan_mat34_rmultm44T_q
00539 #define GAN_MAT_RMULTMT_S                  gan_mat34_rmultm44T_s
00540 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat34_lmultm34T_sym_q
00541 #define GAN_MAT_LMULTMT_SYM_S              gan_mat34_lmultm34T_sym_s
00542 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat34_rmultm34T_sym_q
00543 #define GAN_MAT_RMULTMT_SYM_S              gan_mat34_rmultm34T_sym_s
00544 #define GAN_MAT_SLMULTT_Q                  gan_mat34_slmultT_q
00545 #define GAN_MAT_SLMULTT_S                  gan_mat34_slmultT_s
00546 #define GAN_MAT_SRMULTT_Q                  gan_mat34_srmultT_q
00547 #define GAN_MAT_SRMULTT_S                  gan_mat34_srmultT_s
00548 #define GAN_MAT_LMULTS_Q                   gan_mat34_lmults33_q
00549 #define GAN_MAT_LMULTS_S                   gan_mat34_lmults33_s
00550 #define GAN_MAT_RMULTS_Q                   gan_mat34_rmults44_q
00551 #define GAN_MAT_RMULTS_S                   gan_mat34_rmults44_s
00552 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33_lrmultm34T_q
00553 #define GAN_SYMMATL_LRMULT_S               gan_symmat33_lrmultm34T_s
00554 #define GAN_SYMMATR_LRMULT_Q               gan_symmat44_lrmultm34_q
00555 #define GAN_SYMMATR_LRMULT_S               gan_symmat44_lrmultm34_s
00556 #define GAN_MAT_LMULTL_Q                   gan_mat34_lmultl33_q
00557 #define GAN_MAT_LMULTL_S                   gan_mat34_lmultl33_s
00558 #define GAN_MAT_LMULTL_I                   gan_mat34_lmultl33_i
00559 #define GAN_MAT_LMULTLI_Q                  gan_mat34_lmultl33I_q
00560 #define GAN_MAT_LMULTLI_S                  gan_mat34_lmultl33I_s
00561 #define GAN_MAT_LMULTLI_I                  gan_mat34_lmultl33I_i
00562 #define GAN_MAT_LMULTLT_Q                  gan_mat34_lmultl33T_q
00563 #define GAN_MAT_LMULTLT_S                  gan_mat34_lmultl33T_s
00564 #define GAN_MAT_LMULTLT_I                  gan_mat34_lmultl33T_i
00565 #define GAN_MAT_LMULTLIT_Q                 gan_mat34_lmultl33IT_q
00566 #define GAN_MAT_LMULTLIT_S                 gan_mat34_lmultl33IT_s
00567 #define GAN_MAT_LMULTLIT_I                 gan_mat34_lmultl33IT_i
00568 #define GAN_MAT_RMULTL_Q                   gan_mat34_rmultl44_q
00569 #define GAN_MAT_RMULTL_S                   gan_mat34_rmultl44_s
00570 #define GAN_MAT_RMULTL_I                   gan_mat34_rmultl44_i
00571 #define GAN_MAT_RMULTLI_Q                  gan_mat34_rmultl44I_q
00572 #define GAN_MAT_RMULTLI_S                  gan_mat34_rmultl44I_s
00573 #define GAN_MAT_RMULTLI_I                  gan_mat34_rmultl44I_i
00574 #define GAN_MAT_RMULTLT_Q                  gan_mat34_rmultl44T_q
00575 #define GAN_MAT_RMULTLT_S                  gan_mat34_rmultl44T_s
00576 #define GAN_MAT_RMULTLT_I                  gan_mat34_rmultl44T_i
00577 #define GAN_MAT_RMULTLIT_Q                 gan_mat34_rmultl44IT_q
00578 #define GAN_MAT_RMULTLIT_S                 gan_mat34_rmultl44IT_s
00579 #define GAN_MAT_RMULTLIT_I                 gan_mat34_rmultl44IT_i
00580 #define GAN_MAT_SUMSQR_Q                   gan_mat34_sumsqr_q
00581 #define GAN_MAT_SUMSQR_S                   gan_mat34_sumsqr_s
00582 #define GAN_MAT_FNORM_Q                    gan_mat34_Fnorm_q
00583 #define GAN_MAT_FNORM_S                    gan_mat34_Fnorm_s
00584 #define GAN_MAT_FROM_MAT_Q                 gan_mat34_from_mat_q
00585 #define GAN_MAT_FROM_MAT_S                 gan_mat34_from_mat_s
00586 
00587 #ifndef _GAN_3X4MAT_H
00588 #define _GAN_3X4MAT_H
00589 
00590 
00591 #endif /* #ifndef _GAN_3X4MAT_H */
00592 
00605 /* This library is free software; you can redistribute it and/or
00606    modify it under the terms of the GNU Lesser General Public
00607    License as published by the Free Software Foundation; either
00608    version 2.1 of the License, or (at your option) any later version.
00609 
00610    This library is distributed in the hope that it will be useful,
00611    but WITHOUT ANY WARRANTY; without even the implied warranty of
00612    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00613    Lesser General Public License for more details.
00614 
00615    You should have received a copy of the GNU Lesser General Public
00616    License along with this library; if not, write to the Free Software
00617    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00618 */
00619 
00620 /* function declarations for functions common to all small vector types */
00621 
00622 
00623 
00624 /* documentation for macros defined in individual header files */
00625 
00636  Gan_Matrix34 *gan_mat34_zero_q ( const Gan_Matrix34 *A );
00637 
00654  Gan_Matrix34 *gan_mat34_copy_q ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00655 
00673  Gan_Matrix34 *gan_mat34_scale_q ( Gan_Matrix34 *A, double a,
00674                                Gan_Matrix34 *B );
00675 
00683  Gan_Matrix34 *gan_mat34_scale_i ( Gan_Matrix34 *A, double a );
00684 
00693  Gan_Matrix34 *gan_mat34_divide_q ( Gan_Matrix34 *A, double a,
00694                                 Gan_Matrix34 *B );
00695 
00703  Gan_Matrix34 *gan_mat34_divide_i ( Gan_Matrix34 *A, double a );
00704 
00712  Gan_Matrix34 *gan_mat34_negate_q ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00713 
00721  Gan_Matrix34 *gan_mat34_negate_i ( Gan_Matrix34 *A );
00722 
00730  Gan_Matrix34 *gan_mat34_unit_i ( Gan_Matrix34 *A );
00731 
00749  Gan_Matrix34 *gan_mat34_add_q ( Gan_Matrix34 *A, Gan_Matrix34 *B, Gan_Matrix34 *C );
00750 
00759  Gan_Matrix34 *gan_mat34_add_i1 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00760 
00769  Gan_Matrix34 *gan_mat34_add_i2 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00770 
00779  Gan_Matrix34 *gan_mat34_increment ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00780 
00798  Gan_Matrix34 *gan_mat34_sub_q ( Gan_Matrix34 *A, Gan_Matrix34 *B, Gan_Matrix34 *C );
00799 
00808  Gan_Matrix34 *gan_mat34_sub_i1 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00809 
00818  Gan_Matrix34 *gan_mat34_sub_i2 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00819 
00828  Gan_Matrix34 *gan_mat34_decrement ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00829 
00847  Gan_Matrix34 *gan_vec34_outer_q ( const Gan_Vector3 *p, const Gan_Vector4 *q,
00848                                Gan_Matrix34 *A );
00849 
00858  Gan_Vector3 *gan_mat34_multv4_q ( const Gan_Matrix34 *A, Gan_Vector4 *p,
00859                                 Gan_Vector3 *q );
00860 
00861 
00870  Gan_Vector4 *gan_mat34T_multv3_q ( const Gan_Matrix34 *A, Gan_Vector3 *p,
00871                                  Gan_Vector4 *q );
00872 
00873 
00892  Gan_Matrix34 *gan_mat34_lmultm33_q ( Gan_Matrix34 *A, const Gan_Matrix33 *B,
00893                                 Gan_Matrix34 *C );
00894 
00904  Gan_Matrix34 *gan_mat34_lmultm33T_q ( Gan_Matrix34 *A, const Gan_Matrix33 *B,
00905                                  Gan_Matrix34 *C );
00906 
00916  Gan_Matrix34 *gan_mat34_rmultm44_q ( Gan_Matrix34 *A, const Gan_Matrix44 *B,
00917                                 Gan_Matrix34 *C );
00918 
00928  Gan_Matrix34 *gan_mat34_rmultm44T_q ( Gan_Matrix34 *A, const Gan_Matrix44 *B,
00929                                  Gan_Matrix34 *C );
00930 
00942  Gan_SquMatrix44 *gan_mat34_lmultm34T_sym_q ( const Gan_Matrix34 *A, const Gan_Matrix34 *B,
00943                                          Gan_SquMatrix44 *C );
00944 
00956  Gan_SquMatrix33 *gan_mat34_rmultm34T_sym_q ( const Gan_Matrix34 *A, const Gan_Matrix34 *B,
00957                                          Gan_SquMatrix33 *C );
00958 
00967  Gan_Matrix34 *gan_mat34_lmults33_q ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B,
00968                                 Gan_Matrix34 *C );
00969 
00978  Gan_Matrix34 *gan_mat34_rmults44_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B,
00979                                 Gan_Matrix34 *C );
00980 
01000  Gan_SquMatrix44 *gan_symmat33_lrmultm34T_q ( const Gan_SquMatrix33 *A, const Gan_Matrix34 *B,
01001                                         const Gan_Matrix34 *C, Gan_SquMatrix44 *D );
01002 
01013  Gan_SquMatrix33 *gan_symmat44_lrmultm34_q ( const Gan_SquMatrix44 *A, const Gan_Matrix34 *B,
01014                                         const Gan_Matrix34 *C, Gan_SquMatrix33 *D );
01015 
01034  Gan_Matrix34 *gan_mat34_lmultl33_q ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B,
01035                                 Gan_Matrix34 *C );
01036 
01046  Gan_Matrix34 *gan_mat34_lmultl33I_q ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B,
01047                                  Gan_Matrix34 *C );
01048 
01058  Gan_Matrix34 *gan_mat34_lmultl33T_q ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B,
01059                                  Gan_Matrix34 *C );
01060 
01070  Gan_Matrix34 *gan_mat34_lmultl33IT_q ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B,
01071                                   Gan_Matrix34 *C );
01072 
01082  Gan_Matrix34 *gan_mat34_rmultl44_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B,
01083                                 Gan_Matrix34 *C );
01084 
01094  Gan_Matrix34 *gan_mat34_rmultl44I_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B,
01095                                  Gan_Matrix34 *C );
01096 
01106  Gan_Matrix34 *gan_mat34_rmultl44T_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B,
01107                                  Gan_Matrix34 *C );
01108 
01118  Gan_Matrix34 *gan_mat34_rmultl44IT_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B,
01119                                   Gan_Matrix34 *C );
01120 
01130  Gan_Matrix34 *gan_mat34_lmultl33_i ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B );
01131 
01141  Gan_Matrix34 *gan_mat34_lmultl33I_i ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B );
01142 
01152  Gan_Matrix34 *gan_mat34_lmultl33T_i ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B );
01153 
01163  Gan_Matrix34 *gan_mat34_lmultl33IT_i ( Gan_Matrix34 *A, const Gan_SquMatrix33 *B );
01164 
01174  Gan_Matrix34 *gan_mat34_rmultl44_i ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B );
01175 
01185  Gan_Matrix34 *gan_mat34_rmultl44I_i ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B );
01186 
01196  Gan_Matrix34 *gan_mat34_rmultl44T_i ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B );
01197 
01207  Gan_Matrix34 *gan_mat34_rmultl44IT_i ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B );
01208 
01217  Gan_SquMatrix44 *gan_mat34_slmultT_q ( Gan_Matrix34 *A, const Gan_SquMatrix44 *B );
01218 
01219 
01228  Gan_SquMatrix33 *gan_mat34_srmultT_q ( const Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01229 
01230 
01245  double gan_mat34_sumsqr_q ( const Gan_Matrix34 *A );
01246 
01253  double gan_mat34_Fnorm_q ( const Gan_Matrix34 *A );
01254 
01264  Gan_Matrix34 *gan_mat34_from_mat_q ( const Gan_Matrix *A, Gan_Matrix34 *B );
01265 
01266 
01267 
01286 /* This library is free software; you can redistribute it and/or
01287    modify it under the terms of the GNU Lesser General Public
01288    License as published by the Free Software Foundation; either
01289    version 2.1 of the License, or (at your option) any later version.
01290 
01291    This library is distributed in the hope that it will be useful,
01292    but WITHOUT ANY WARRANTY; without even the implied warranty of
01293    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01294    Lesser General Public License for more details.
01295 
01296    You should have received a copy of the GNU Lesser General Public
01297    License along with this library; if not, write to the Free Software
01298    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01299 */
01300 
01301 #undef GAN_MATTYPE
01302 #undef GAN_MATRIX_TYPE
01303 #undef GAN_SQUMATRIX_TYPE
01304 #undef GAN_VECTOR_TYPE
01305 #undef GAN_MAT_ELEMENT_TYPE
01306 #undef GAN_REALTYPE
01307 #undef GAN_FWRITE_LENDIAN
01308 #undef GAN_FREAD_LENDIAN
01309 #undef GAN_VECTYPE1
01310 #undef GAN_VECTYPE2
01311 #undef GAN_MATTYPEL
01312 #undef GAN_MATTYPER
01313 #undef GAN_SQUMATTYPEL
01314 #undef GAN_SQUMATTYPER
01315 #undef GAN_FIXED_MATRIX_TYPE
01316 #undef GAN_MAT_FPRINT
01317 #undef GAN_MAT_PRINT
01318 #undef GAN_MAT_FSCANF
01319 #undef GAN_MAT_FWRITE
01320 #undef GAN_MAT_FREAD
01321 #undef GAN_MAT_ZERO_Q
01322 #undef GAN_MAT_ZERO_S
01323 #undef GAN_MAT_COPY_Q
01324 #undef GAN_MAT_COPY_S
01325 #undef GAN_MAT_SCALE_Q
01326 #undef GAN_MAT_SCALE_S
01327 #undef GAN_MAT_SCALE_I
01328 #undef GAN_MAT_DIVIDE_Q
01329 #undef GAN_MAT_DIVIDE_S
01330 #undef GAN_MAT_DIVIDE_I
01331 #undef GAN_MAT_NEGATE_Q
01332 #undef GAN_MAT_NEGATE_S
01333 #undef GAN_MAT_NEGATE_I
01334 #undef GAN_MAT_UNIT_Q
01335 #undef GAN_MAT_UNIT_S
01336 #undef GAN_MAT_UNIT_I
01337 #undef GAN_MAT_ADD_Q
01338 #undef GAN_MAT_ADD_I1
01339 #undef GAN_MAT_ADD_I2
01340 #undef GAN_MAT_INCREMENT
01341 #undef GAN_MAT_ADD_S
01342 #undef GAN_MAT_SUB_Q
01343 #undef GAN_MAT_SUB_I1
01344 #undef GAN_MAT_SUB_I2
01345 #undef GAN_MAT_DECREMENT
01346 #undef GAN_MAT_SUB_S
01347 #undef GAN_VEC_OUTER_Q
01348 #undef GAN_VEC_OUTER_S
01349 #undef GAN_MAT_MULTV_Q
01350 #undef GAN_MAT_MULTV_S
01351 #undef GAN_MAT_MULTV_I
01352 #undef GAN_MATT_MULTV_Q
01353 #undef GAN_MATT_MULTV_S
01354 #undef GAN_MATT_MULTV_I
01355 #undef GAN_MAT_LMULTM_Q
01356 #undef GAN_MAT_LMULTM_S
01357 #undef GAN_MAT_LMULTMT_Q
01358 #undef GAN_MAT_LMULTMT_S
01359 #undef GAN_MAT_RMULTM_Q
01360 #undef GAN_MAT_RMULTM_S
01361 #undef GAN_MAT_RMULTMT_Q
01362 #undef GAN_MAT_RMULTMT_S
01363 #undef GAN_MAT_LMULTMT_SYM_Q
01364 #undef GAN_MAT_LMULTMT_SYM_S
01365 #undef GAN_MAT_RMULTMT_SYM_Q
01366 #undef GAN_MAT_RMULTMT_SYM_S
01367 #undef GAN_MAT_LMULTS_Q
01368 #undef GAN_MAT_LMULTS_S
01369 #undef GAN_MAT_RMULTS_Q
01370 #undef GAN_MAT_RMULTS_S
01371 #undef GAN_SYMMATL_LRMULT_Q
01372 #undef GAN_SYMMATL_LRMULT_S
01373 #undef GAN_SYMMATR_LRMULT_Q
01374 #undef GAN_SYMMATR_LRMULT_S
01375 #undef GAN_MAT_LMULTL_Q
01376 #undef GAN_MAT_LMULTL_S
01377 #undef GAN_MAT_LMULTL_I
01378 #undef GAN_MAT_LMULTLI_Q
01379 #undef GAN_MAT_LMULTLI_S
01380 #undef GAN_MAT_LMULTLI_I
01381 #undef GAN_MAT_LMULTLT_Q
01382 #undef GAN_MAT_LMULTLT_S
01383 #undef GAN_MAT_LMULTLT_I
01384 #undef GAN_MAT_LMULTLIT_Q
01385 #undef GAN_MAT_LMULTLIT_S
01386 #undef GAN_MAT_LMULTLIT_I
01387 #undef GAN_MAT_RMULTL_Q
01388 #undef GAN_MAT_RMULTL_S
01389 #undef GAN_MAT_RMULTL_I
01390 #undef GAN_MAT_RMULTLI_Q
01391 #undef GAN_MAT_RMULTLI_S
01392 #undef GAN_MAT_RMULTLI_I
01393 #undef GAN_MAT_RMULTLT_Q
01394 #undef GAN_MAT_RMULTLT_S
01395 #undef GAN_MAT_RMULTLT_I
01396 #undef GAN_MAT_RMULTLIT_Q
01397 #undef GAN_MAT_RMULTLIT_S
01398 #undef GAN_MAT_RMULTLIT_I
01399 #undef GAN_MAT_SRMULTT_Q
01400 #undef GAN_MAT_SRMULTT_S
01401 #undef GAN_MAT_SRMULTT_I
01402 #undef GAN_MAT_SLMULTT_Q
01403 #undef GAN_MAT_SLMULTT_S
01404 #undef GAN_MAT_SLMULTT_I
01405 #undef GAN_MAT_RMULTLIT_S
01406 #undef GAN_MAT_SUMSQR_Q
01407 #undef GAN_MAT_SUMSQR_S
01408 #undef GAN_MAT_FNORM_Q
01409 #undef GAN_MAT_FNORM_S
01410 #undef GAN_MAT_FROM_MAT_Q
01411 #undef GAN_MAT_FROM_MAT_S
01412 #undef GAN_MAT_FROM_SQUMAT_Q
01413 #undef GAN_MAT_FROM_SQUMAT_S
01414 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01415 #undef GAN_SQUMAT_FROM_SQUMAT_S
01416 
01429 #ifdef __cplusplus
01430 }
01431 #endif
01432 
01433 #endif /* #ifndef _GAN_3X4MATRIX_H */

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