Main Page   Modules   Compound List   File List   Compound 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 ( Gan_Matrix34 *A, Gan_Matrix34 *B,
00337                                       Gan_Matrix33 *C );
00338 
00360 Gan_Vector3 *gan_mat34_multv3h_q ( Gan_Matrix34 *A, Gan_Vector3 *p, double h,
00361                                    Gan_Vector3 *q );
00362 
00384 void gan_mat34_get_rows_q ( Gan_Matrix34 *A,
00385                             Gan_Vector4 *p, Gan_Vector4 *q, Gan_Vector4 *r );
00386 
00398 void gan_mat34_get_cols_q ( 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 ( Gan_Matrix34 *A, Gan_Matrix33 *B );
00409 
00417 Gan_Vector3 *gan_mat34_get_v3r_q ( Gan_Matrix34 *A, Gan_Vector3 *p );
00418 
00440 Gan_Matrix34 *gan_mat34_set_parts_q ( Gan_Matrix34 *A,
00441                                       Gan_Matrix33 *B, Gan_Vector3 *p );
00442 
00454 Gan_Matrix34 *gan_mat34_set_cols_q ( Gan_Matrix34 *A,
00455                                      Gan_Vector3 *p, Gan_Vector3 *q,
00456                                      Gan_Vector3 *r, Gan_Vector3 *s );
00457 
00470 Gan_Matrix34 *gan_mat34_set_rows_q ( Gan_Matrix34 *A,
00471                                      Gan_Vector4 *p, Gan_Vector4 *q,
00472                                      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_VECTYPE1 Gan_Vector3
00488 #define GAN_VECTYPE2 Gan_Vector4
00489 #define GAN_MATTYPEL Gan_Matrix33
00490 #define GAN_MATTYPER Gan_Matrix44
00491 #define GAN_SQUMATTYPEL Gan_SquMatrix33
00492 #define GAN_SQUMATTYPER Gan_SquMatrix44
00493 #define GAN_MAT_FPRINT                     gan_mat34_fprint
00494 #define GAN_MAT_PRINT                      gan_mat34_print
00495 #define GAN_MAT_FSCANF                     gan_mat34_fscanf
00496 #define GAN_MAT_FWRITE                     gan_mat34_fwrite
00497 #define GAN_MAT_FREAD                      gan_mat34_fread
00498 #define GAN_MAT_ZERO_Q                     gan_mat34_zero_q
00499 #define GAN_MAT_ZERO_S                     gan_mat34_zero_s
00500 #define GAN_MAT_COPY_Q                     gan_mat34_copy_q
00501 #define GAN_MAT_COPY_S                     gan_mat34_copy_s
00502 #define GAN_MAT_SCALE_Q                    gan_mat34_scale_q
00503 #define GAN_MAT_SCALE_I                    gan_mat34_scale_i
00504 #define GAN_MAT_SCALE_S                    gan_mat34_scale_s
00505 #define GAN_MAT_DIVIDE_Q                   gan_mat34_divide_q
00506 #define GAN_MAT_DIVIDE_I                   gan_mat34_divide_i
00507 #define GAN_MAT_DIVIDE_S                   gan_mat34_divide_s
00508 #define GAN_MAT_NEGATE_Q                   gan_mat34_negate_q
00509 #define GAN_MAT_NEGATE_I                   gan_mat34_negate_i
00510 #define GAN_MAT_NEGATE_S                   gan_mat34_negate_s
00511 #define GAN_MAT_UNIT_Q                     gan_mat34_unit_q
00512 #define GAN_MAT_UNIT_I                     gan_mat34_unit_i
00513 #define GAN_MAT_UNIT_S                     gan_mat34_unit_s
00514 #define GAN_MAT_ADD_Q                      gan_mat34_add_q
00515 #define GAN_MAT_ADD_I1                     gan_mat34_add_i1
00516 #define GAN_MAT_ADD_I2                     gan_mat34_add_i2
00517 #define GAN_MAT_INCREMENT                  gan_mat34_increment
00518 #define GAN_MAT_ADD_S                      gan_mat34_add_s
00519 #define GAN_MAT_SUB_Q                      gan_mat34_sub_q
00520 #define GAN_MAT_SUB_I1                     gan_mat34_sub_i1
00521 #define GAN_MAT_SUB_I2                     gan_mat34_sub_i2
00522 #define GAN_MAT_DECREMENT                  gan_mat34_decrement
00523 #define GAN_MAT_SUB_S                      gan_mat34_sub_s
00524 #define GAN_VEC_OUTER_Q                    gan_vec34_outer_q
00525 #define GAN_VEC_OUTER_S                    gan_vec34_outer_s
00526 #define GAN_MAT_MULTV_Q                    gan_mat34_multv4_q
00527 #define GAN_MAT_MULTV_S                    gan_mat34_multv4_s
00528 #define GAN_MATT_MULTV_Q                   gan_mat34T_multv3_q
00529 #define GAN_MATT_MULTV_S                   gan_mat34T_multv3_s
00530 #define GAN_MAT_LMULTM_Q                   gan_mat34_lmultm33_q
00531 #define GAN_MAT_LMULTM_S                   gan_mat34_lmultm33_s
00532 #define GAN_MAT_LMULTMT_Q                  gan_mat34_lmultm33T_q
00533 #define GAN_MAT_LMULTMT_S                  gan_mat34_lmultm33T_s
00534 #define GAN_MAT_RMULTM_Q                   gan_mat34_rmultm44_q
00535 #define GAN_MAT_RMULTM_S                   gan_mat34_rmultm44_s
00536 #define GAN_MAT_RMULTMT_Q                  gan_mat34_rmultm44T_q
00537 #define GAN_MAT_RMULTMT_S                  gan_mat34_rmultm44T_s
00538 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat34_lmultm34T_sym_q
00539 #define GAN_MAT_LMULTMT_SYM_S              gan_mat34_lmultm34T_sym_s
00540 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat34_rmultm34T_sym_q
00541 #define GAN_MAT_RMULTMT_SYM_S              gan_mat34_rmultm34T_sym_s
00542 #define GAN_MAT_SLMULTT_Q                  gan_mat34_slmultT_q
00543 #define GAN_MAT_SLMULTT_S                  gan_mat34_slmultT_s
00544 #define GAN_MAT_SRMULTT_Q                  gan_mat34_srmultT_q
00545 #define GAN_MAT_SRMULTT_S                  gan_mat34_srmultT_s
00546 #define GAN_MAT_LMULTS_Q                   gan_mat34_lmults33_q
00547 #define GAN_MAT_LMULTS_S                   gan_mat34_lmults33_s
00548 #define GAN_MAT_RMULTS_Q                   gan_mat34_rmults44_q
00549 #define GAN_MAT_RMULTS_S                   gan_mat34_rmults44_s
00550 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33_lrmultm34T_q
00551 #define GAN_SYMMATL_LRMULT_S               gan_symmat33_lrmultm34T_s
00552 #define GAN_SYMMATR_LRMULT_Q               gan_symmat44_lrmultm34_q
00553 #define GAN_SYMMATR_LRMULT_S               gan_symmat44_lrmultm34_s
00554 #define GAN_MAT_LMULTL_Q                   gan_mat34_lmultl33_q
00555 #define GAN_MAT_LMULTL_S                   gan_mat34_lmultl33_s
00556 #define GAN_MAT_LMULTL_I                   gan_mat34_lmultl33_i
00557 #define GAN_MAT_LMULTLI_Q                  gan_mat34_lmultl33I_q
00558 #define GAN_MAT_LMULTLI_S                  gan_mat34_lmultl33I_s
00559 #define GAN_MAT_LMULTLI_I                  gan_mat34_lmultl33I_i
00560 #define GAN_MAT_LMULTLT_Q                  gan_mat34_lmultl33T_q
00561 #define GAN_MAT_LMULTLT_S                  gan_mat34_lmultl33T_s
00562 #define GAN_MAT_LMULTLT_I                  gan_mat34_lmultl33T_i
00563 #define GAN_MAT_LMULTLIT_Q                 gan_mat34_lmultl33IT_q
00564 #define GAN_MAT_LMULTLIT_S                 gan_mat34_lmultl33IT_s
00565 #define GAN_MAT_LMULTLIT_I                 gan_mat34_lmultl33IT_i
00566 #define GAN_MAT_RMULTL_Q                   gan_mat34_rmultl44_q
00567 #define GAN_MAT_RMULTL_S                   gan_mat34_rmultl44_s
00568 #define GAN_MAT_RMULTL_I                   gan_mat34_rmultl44_i
00569 #define GAN_MAT_RMULTLI_Q                  gan_mat34_rmultl44I_q
00570 #define GAN_MAT_RMULTLI_S                  gan_mat34_rmultl44I_s
00571 #define GAN_MAT_RMULTLI_I                  gan_mat34_rmultl44I_i
00572 #define GAN_MAT_RMULTLT_Q                  gan_mat34_rmultl44T_q
00573 #define GAN_MAT_RMULTLT_S                  gan_mat34_rmultl44T_s
00574 #define GAN_MAT_RMULTLT_I                  gan_mat34_rmultl44T_i
00575 #define GAN_MAT_RMULTLIT_Q                 gan_mat34_rmultl44IT_q
00576 #define GAN_MAT_RMULTLIT_S                 gan_mat34_rmultl44IT_s
00577 #define GAN_MAT_RMULTLIT_I                 gan_mat34_rmultl44IT_i
00578 #define GAN_MAT_SUMSQR_Q                   gan_mat34_sumsqr_q
00579 #define GAN_MAT_SUMSQR_S                   gan_mat34_sumsqr_s
00580 #define GAN_MAT_FNORM_Q                    gan_mat34_Fnorm_q
00581 #define GAN_MAT_FNORM_S                    gan_mat34_Fnorm_s
00582 #define GAN_MAT_FROM_MAT_Q                 gan_mat34_from_mat_q
00583 #define GAN_MAT_FROM_MAT_S                 gan_mat34_from_mat_s
00584 
00585 #ifndef _GAN_3X4MAT_H
00586 #define _GAN_3X4MAT_H
00587 
00588 
00589 #endif /* #ifndef _GAN_3X4MAT_H */
00590 
00603 /* This library is free software; you can redistribute it and/or
00604    modify it under the terms of the GNU Lesser General Public
00605    License as published by the Free Software Foundation; either
00606    version 2.1 of the License, or (at your option) any later version.
00607 
00608    This library is distributed in the hope that it will be useful,
00609    but WITHOUT ANY WARRANTY; without even the implied warranty of
00610    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00611    Lesser General Public License for more details.
00612 
00613    You should have received a copy of the GNU Lesser General Public
00614    License along with this library; if not, write to the Free Software
00615    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00616 */
00617 
00618 /* function declarations for functions common to all small vector types */
00619 
00620 
00621 
00622 /* documentation for macros defined in individual header files */
00623 
00634 Gan_Matrix34 *gan_mat34_zero_q ( Gan_Matrix34 *A );
00635 
00652 Gan_Matrix34 *gan_mat34_copy_q ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00653 
00671 Gan_Matrix34 *gan_mat34_scale_q ( Gan_Matrix34 *A, double a,
00672                                Gan_Matrix34 *B );
00673 
00681 Gan_Matrix34 *gan_mat34_scale_i ( Gan_Matrix34 *A, double a );
00682 
00691 Gan_Matrix34 *gan_mat34_divide_q ( Gan_Matrix34 *A, double a,
00692                                 Gan_Matrix34 *B );
00693 
00701 Gan_Matrix34 *gan_mat34_divide_i ( Gan_Matrix34 *A, double a );
00702 
00710 Gan_Matrix34 *gan_mat34_negate_q ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00711 
00719 Gan_Matrix34 *gan_mat34_negate_i ( Gan_Matrix34 *A );
00720 
00728 Gan_Matrix34 *gan_mat34_unit_i ( Gan_Matrix34 *A );
00729 
00747 Gan_Matrix34 *gan_mat34_add_q ( Gan_Matrix34 *A, Gan_Matrix34 *B, Gan_Matrix34 *C );
00748 
00757 Gan_Matrix34 *gan_mat34_add_i1 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00758 
00767 Gan_Matrix34 *gan_mat34_add_i2 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00768 
00777 Gan_Matrix34 *gan_mat34_increment ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00778 
00796 Gan_Matrix34 *gan_mat34_sub_q ( Gan_Matrix34 *A, Gan_Matrix34 *B, Gan_Matrix34 *C );
00797 
00806 Gan_Matrix34 *gan_mat34_sub_i1 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00807 
00816 Gan_Matrix34 *gan_mat34_sub_i2 ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00817 
00826 Gan_Matrix34 *gan_mat34_decrement ( Gan_Matrix34 *A, Gan_Matrix34 *B );
00827 
00845 Gan_Matrix34 *gan_vec34_outer_q ( Gan_Vector3 *p, Gan_Vector4 *q,
00846                                Gan_Matrix34 *A );
00847 
00856 Gan_Vector3 *gan_mat34_multv4_q ( Gan_Matrix34 *A, Gan_Vector4 *p,
00857                                 Gan_Vector3 *q );
00858 
00859 
00868 Gan_Vector4 *gan_mat34T_multv3_q ( Gan_Matrix34 *A, Gan_Vector3 *p,
00869                                  Gan_Vector4 *q );
00870 
00871 
00890 Gan_Matrix34 *gan_mat34_lmultm33_q ( Gan_Matrix34 *A, Gan_Matrix33 *B,
00891                                 Gan_Matrix34 *C );
00892 
00902 Gan_Matrix34 *gan_mat34_lmultm33T_q ( Gan_Matrix34 *A, Gan_Matrix33 *B,
00903                                  Gan_Matrix34 *C );
00904 
00914 Gan_Matrix34 *gan_mat34_rmultm44_q ( Gan_Matrix34 *A, Gan_Matrix44 *B,
00915                                 Gan_Matrix34 *C );
00916 
00926 Gan_Matrix34 *gan_mat34_rmultm44T_q ( Gan_Matrix34 *A, Gan_Matrix44 *B,
00927                                  Gan_Matrix34 *C );
00928 
00940 Gan_SquMatrix44 *gan_mat34_lmultm34T_sym_q ( Gan_Matrix34 *A, Gan_Matrix34 *B,
00941                                          Gan_SquMatrix44 *C );
00942 
00954 Gan_SquMatrix33 *gan_mat34_rmultm34T_sym_q ( Gan_Matrix34 *A, Gan_Matrix34 *B,
00955                                          Gan_SquMatrix33 *C );
00956 
00965 Gan_Matrix34 *gan_mat34_lmults33_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B,
00966                                 Gan_Matrix34 *C );
00967 
00976 Gan_Matrix34 *gan_mat34_rmults44_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B,
00977                                 Gan_Matrix34 *C );
00978 
00998 Gan_SquMatrix44 *gan_symmat33_lrmultm34T_q ( Gan_SquMatrix33 *A, Gan_Matrix34 *B,
00999                                         Gan_Matrix34 *C, Gan_SquMatrix44 *D );
01000 
01011 Gan_SquMatrix33 *gan_symmat44_lrmultm34_q ( Gan_SquMatrix44 *A, Gan_Matrix34 *B,
01012                                         Gan_Matrix34 *C, Gan_SquMatrix33 *D );
01013 
01032 Gan_Matrix34 *gan_mat34_lmultl33_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B,
01033                                 Gan_Matrix34 *C );
01034 
01044 Gan_Matrix34 *gan_mat34_lmultl33I_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B,
01045                                  Gan_Matrix34 *C );
01046 
01056 Gan_Matrix34 *gan_mat34_lmultl33T_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B,
01057                                  Gan_Matrix34 *C );
01058 
01068 Gan_Matrix34 *gan_mat34_lmultl33IT_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B,
01069                                   Gan_Matrix34 *C );
01070 
01080 Gan_Matrix34 *gan_mat34_rmultl44_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B,
01081                                 Gan_Matrix34 *C );
01082 
01092 Gan_Matrix34 *gan_mat34_rmultl44I_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B,
01093                                  Gan_Matrix34 *C );
01094 
01104 Gan_Matrix34 *gan_mat34_rmultl44T_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B,
01105                                  Gan_Matrix34 *C );
01106 
01116 Gan_Matrix34 *gan_mat34_rmultl44IT_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B,
01117                                   Gan_Matrix34 *C );
01118 
01128 Gan_Matrix34 *gan_mat34_lmultl33_i ( Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01129 
01139 Gan_Matrix34 *gan_mat34_lmultl33I_i ( Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01140 
01150 Gan_Matrix34 *gan_mat34_lmultl33T_i ( Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01151 
01161 Gan_Matrix34 *gan_mat34_lmultl33IT_i ( Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01162 
01172 Gan_Matrix34 *gan_mat34_rmultl44_i ( Gan_Matrix34 *A, Gan_SquMatrix44 *B );
01173 
01183 Gan_Matrix34 *gan_mat34_rmultl44I_i ( Gan_Matrix34 *A, Gan_SquMatrix44 *B );
01184 
01194 Gan_Matrix34 *gan_mat34_rmultl44T_i ( Gan_Matrix34 *A, Gan_SquMatrix44 *B );
01195 
01205 Gan_Matrix34 *gan_mat34_rmultl44IT_i ( Gan_Matrix34 *A, Gan_SquMatrix44 *B );
01206 
01215 Gan_SquMatrix44 *gan_mat34_slmultT_q ( Gan_Matrix34 *A, Gan_SquMatrix44 *B );
01216 
01217 
01226 Gan_SquMatrix33 *gan_mat34_srmultT_q ( Gan_Matrix34 *A, Gan_SquMatrix33 *B );
01227 
01228 
01243 double gan_mat34_sumsqr_q ( Gan_Matrix34 *A );
01244 
01251 double gan_mat34_Fnorm_q ( Gan_Matrix34 *A );
01252 
01270 Gan_Matrix34 *gan_mat34_from_mat_q ( Gan_Matrix *A, Gan_Matrix34 *B );
01271 
01272 
01273 
01292 /* This library is free software; you can redistribute it and/or
01293    modify it under the terms of the GNU Lesser General Public
01294    License as published by the Free Software Foundation; either
01295    version 2.1 of the License, or (at your option) any later version.
01296 
01297    This library is distributed in the hope that it will be useful,
01298    but WITHOUT ANY WARRANTY; without even the implied warranty of
01299    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01300    Lesser General Public License for more details.
01301 
01302    You should have received a copy of the GNU Lesser General Public
01303    License along with this library; if not, write to the Free Software
01304    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01305 */
01306 
01307 #undef GAN_MATTYPE
01308 #undef GAN_MATRIX_TYPE
01309 #undef GAN_SQUMATRIX_TYPE
01310 #undef GAN_VECTOR_TYPE
01311 #undef GAN_MAT_ELEMENT_TYPE
01312 #undef GAN_REALTYPE
01313 #undef GAN_VECTYPE1
01314 #undef GAN_VECTYPE2
01315 #undef GAN_MATTYPEL
01316 #undef GAN_MATTYPER
01317 #undef GAN_SQUMATTYPEL
01318 #undef GAN_SQUMATTYPER
01319 #undef GAN_FIXED_MATRIX_TYPE
01320 #undef GAN_MAT_FPRINT
01321 #undef GAN_MAT_PRINT
01322 #undef GAN_MAT_FSCANF
01323 #undef GAN_MAT_FWRITE
01324 #undef GAN_MAT_FREAD
01325 #undef GAN_MAT_ZERO_Q
01326 #undef GAN_MAT_ZERO_S
01327 #undef GAN_MAT_COPY_Q
01328 #undef GAN_MAT_COPY_S
01329 #undef GAN_MAT_SCALE_Q
01330 #undef GAN_MAT_SCALE_S
01331 #undef GAN_MAT_SCALE_I
01332 #undef GAN_MAT_DIVIDE_Q
01333 #undef GAN_MAT_DIVIDE_S
01334 #undef GAN_MAT_DIVIDE_I
01335 #undef GAN_MAT_NEGATE_Q
01336 #undef GAN_MAT_NEGATE_S
01337 #undef GAN_MAT_NEGATE_I
01338 #undef GAN_MAT_UNIT_Q
01339 #undef GAN_MAT_UNIT_S
01340 #undef GAN_MAT_UNIT_I
01341 #undef GAN_MAT_ADD_Q
01342 #undef GAN_MAT_ADD_I1
01343 #undef GAN_MAT_ADD_I2
01344 #undef GAN_MAT_INCREMENT
01345 #undef GAN_MAT_ADD_S
01346 #undef GAN_MAT_SUB_Q
01347 #undef GAN_MAT_SUB_I1
01348 #undef GAN_MAT_SUB_I2
01349 #undef GAN_MAT_DECREMENT
01350 #undef GAN_MAT_SUB_S
01351 #undef GAN_VEC_OUTER_Q
01352 #undef GAN_VEC_OUTER_S
01353 #undef GAN_MAT_MULTV_Q
01354 #undef GAN_MAT_MULTV_S
01355 #undef GAN_MAT_MULTV_I
01356 #undef GAN_MATT_MULTV_Q
01357 #undef GAN_MATT_MULTV_S
01358 #undef GAN_MATT_MULTV_I
01359 #undef GAN_MAT_LMULTM_Q
01360 #undef GAN_MAT_LMULTM_S
01361 #undef GAN_MAT_LMULTMT_Q
01362 #undef GAN_MAT_LMULTMT_S
01363 #undef GAN_MAT_RMULTM_Q
01364 #undef GAN_MAT_RMULTM_S
01365 #undef GAN_MAT_RMULTMT_Q
01366 #undef GAN_MAT_RMULTMT_S
01367 #undef GAN_MAT_LMULTMT_SYM_Q
01368 #undef GAN_MAT_LMULTMT_SYM_S
01369 #undef GAN_MAT_RMULTMT_SYM_Q
01370 #undef GAN_MAT_RMULTMT_SYM_S
01371 #undef GAN_MAT_LMULTS_Q
01372 #undef GAN_MAT_LMULTS_S
01373 #undef GAN_MAT_RMULTS_Q
01374 #undef GAN_MAT_RMULTS_S
01375 #undef GAN_SYMMATL_LRMULT_Q
01376 #undef GAN_SYMMATL_LRMULT_S
01377 #undef GAN_SYMMATR_LRMULT_Q
01378 #undef GAN_SYMMATR_LRMULT_S
01379 #undef GAN_MAT_LMULTL_Q
01380 #undef GAN_MAT_LMULTL_S
01381 #undef GAN_MAT_LMULTL_I
01382 #undef GAN_MAT_LMULTLI_Q
01383 #undef GAN_MAT_LMULTLI_S
01384 #undef GAN_MAT_LMULTLI_I
01385 #undef GAN_MAT_LMULTLT_Q
01386 #undef GAN_MAT_LMULTLT_S
01387 #undef GAN_MAT_LMULTLT_I
01388 #undef GAN_MAT_LMULTLIT_Q
01389 #undef GAN_MAT_LMULTLIT_S
01390 #undef GAN_MAT_LMULTLIT_I
01391 #undef GAN_MAT_RMULTL_Q
01392 #undef GAN_MAT_RMULTL_S
01393 #undef GAN_MAT_RMULTL_I
01394 #undef GAN_MAT_RMULTLI_Q
01395 #undef GAN_MAT_RMULTLI_S
01396 #undef GAN_MAT_RMULTLI_I
01397 #undef GAN_MAT_RMULTLT_Q
01398 #undef GAN_MAT_RMULTLT_S
01399 #undef GAN_MAT_RMULTLT_I
01400 #undef GAN_MAT_RMULTLIT_Q
01401 #undef GAN_MAT_RMULTLIT_S
01402 #undef GAN_MAT_RMULTLIT_I
01403 #undef GAN_MAT_SRMULTT_Q
01404 #undef GAN_MAT_SRMULTT_S
01405 #undef GAN_MAT_SRMULTT_I
01406 #undef GAN_MAT_SLMULTT_Q
01407 #undef GAN_MAT_SLMULTT_S
01408 #undef GAN_MAT_SLMULTT_I
01409 #undef GAN_MAT_RMULTLIT_S
01410 #undef GAN_MAT_SUMSQR_Q
01411 #undef GAN_MAT_SUMSQR_S
01412 #undef GAN_MAT_FNORM_Q
01413 #undef GAN_MAT_FNORM_S
01414 #undef GAN_MAT_FROM_MAT_Q
01415 #undef GAN_MAT_FROM_MAT_S
01416 #undef GAN_MAT_FROM_SQUMAT_Q
01417 #undef GAN_MAT_FROM_SQUMAT_S
01418 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01419 #undef GAN_SQUMAT_FROM_SQUMAT_S
01420 
01433 #ifdef __cplusplus
01434 }
01435 #endif
01436 
01437 #endif /* #ifndef _GAN_3X4MATRIX_H */

Generated on Mon Oct 13 16:14:31 2003 by doxygen1.3-rc1