Main Page   Modules   Compound List   File List   Compound Members   File Members  

3x3matrixf.h

Go to the documentation of this file.
00001 
00014 /* This library is free software; you can redistribute it and/or
00015    modify it under the terms of the GNU Lesser General Public
00016    License as published by the Free Software Foundation; either
00017    version 2.1 of the License, or (at your option) any later version.
00018 
00019    This library is distributed in the hope that it will be useful,
00020    but WITHOUT ANY WARRANTY; without even the implied warranty of
00021    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022    Lesser General Public License for more details.
00023 
00024    You should have received a copy of the GNU Lesser General Public
00025    License along with this library; if not, write to the Free Software
00026    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027 */
00028 
00029 #ifndef _GAN_3X3MATRIXF_H
00030 #define _GAN_3X3MATRIXF_H
00031 
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034 #include <math.h>
00035 #include <gandalf/common/misc_defs.h>
00049 /* This library is free software; you can redistribute it and/or
00050    modify it under the terms of the GNU Lesser General Public
00051    License as published by the Free Software Foundation; either
00052    version 2.1 of the License, or (at your option) any later version.
00053 
00054    This library is distributed in the hope that it will be useful,
00055    but WITHOUT ANY WARRANTY; without even the implied warranty of
00056    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00057    Lesser General Public License for more details.
00058 
00059    You should have received a copy of the GNU Lesser General Public
00060    License along with this library; if not, write to the Free Software
00061    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00062 */
00063 
00064 #ifndef _GAN_REPEAT33_H
00065 #define _GAN_REPEAT33_H
00066 
00080 /* This library is free software; you can redistribute it and/or
00081    modify it under the terms of the GNU Lesser General Public
00082    License as published by the Free Software Foundation; either
00083    version 2.1 of the License, or (at your option) any later version.
00084 
00085    This library is distributed in the hope that it will be useful,
00086    but WITHOUT ANY WARRANTY; without even the implied warranty of
00087    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00088    Lesser General Public License for more details.
00089 
00090    You should have received a copy of the GNU Lesser General Public
00091    License along with this library; if not, write to the Free Software
00092    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00093 */
00094 
00095 #ifndef _GAN_REPEAT1_H
00096 #define _GAN_REPEAT1_H
00097 
00098 #ifdef __cplusplus
00099 extern "C" {
00100 #endif
00101 
00102 /* macros for constructing one-fold repetitions (for consistency) */
00103 #define GAN_REP1_AS(a,b,p1) (a p1 b)
00104 #define GAN_REP1_A(a,p1) (a p1)
00105 #define GAN_REP1_A_C(a,b) GAN_REP1_A(a,b,x)
00106 
00107 #define GAN_FREP1_A(a,b,p1,q1) (a p1 b q1)
00108 #define GAN_FREP1_A_C(a,b,p1) GAN_FREP1_A(a,b,x,p1)
00109 
00110 #define GAN_REP1_ABS(a,b,c,p1,q1) (a p1 b q1 c)
00111 #define GAN_REP1_AAS(a,b,c,p1) GAN_REP1_ABS(a,b,c,p1,p1)
00112 #define GAN_REP1_AAS_C(a,b,c) GAN_REP1_AAS(a,b,c,x)
00113 
00114 #define GAN_REP1_AB(a,b,p1,q1) (a p1 b q1)
00115 #define GAN_REP1_AA(a,b,p1) GAN_REP1_AB(a,b,p1,p1)
00116 #define GAN_REP1_AA_C(a,b) GAN_REP1_AA(a,b,x)
00117 
00118 #define GAN_REP1_ABCS(a,b,c,d,p1,q1,r1) (a p1 b q1 c r1 d)
00119 #define GAN_REP1_ABC(a,b,c,p1,q1,r1) (a p1 b q1 c r1)
00120 #define GAN_REP1_AAA(a,b,c,p1) GAN_REP1_ABC(a,b,c,p1,p1,p1)
00121 #define GAN_REP1_AAA_C(a,b,c) GAN_REP1_AAA(a,b,c,x)
00122 
00123 #define GAN_REP1_OP_AB(a,b,p1,q1,op) (a p1 b q1)
00124 #define GAN_REP1_OP_AA(a,b,p1,op) GAN_REP1_OP_AB(a,b,p1,p1,op)
00125 #define GAN_REP1_OP_AA_C(a,b,op) GAN_REP1_OP_AA(a,b,x,op)
00126 
00127 #ifdef __cplusplus
00128 }
00129 #endif
00130 
00131 #endif /* #ifndef _GAN_REPEAT1_H */
00132 
00145 /* This library is free software; you can redistribute it and/or
00146    modify it under the terms of the GNU Lesser General Public
00147    License as published by the Free Software Foundation; either
00148    version 2.1 of the License, or (at your option) any later version.
00149 
00150    This library is distributed in the hope that it will be useful,
00151    but WITHOUT ANY WARRANTY; without even the implied warranty of
00152    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00153    Lesser General Public License for more details.
00154 
00155    You should have received a copy of the GNU Lesser General Public
00156    License along with this library; if not, write to the Free Software
00157    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00158 */
00159 
00160 #ifndef _GAN_REPEAT2_H
00161 #define _GAN_REPEAT2_H
00162 
00163 #ifdef __cplusplus
00164 extern "C" {
00165 #endif
00166 
00167 /* macros for constructing two-fold repetitions */
00168 #define GAN_REP2_AS(a,b,p1,p2) (a p1 b, a p2 b)
00169 #define GAN_REP2_A(a,p1,p2) (a p1, a p2)
00170 #define GAN_REP2_AS_C(a,b) GAN_REP2_AS(a,b,x,y)
00171 #define GAN_REP2_A_C(a) GAN_REP2_A(a,x,y)
00172 
00173 #define GAN_FREP2_A(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00174 #define GAN_FREP2_A_C(a,b,p1,p2) GAN_FREP2_A(a,b,x,y,p1,p2)
00175 
00176 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00177 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00178 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00179 
00180 #define GAN_REP2_ABS(a,b,c,p1,p2,q1,q2) (a p1 b q1 c, a p2 b q2 c)
00181 #define GAN_REP2_AAS(a,b,c,p1,p2) GAN_REP2_ABS(a,b,c,p1,p2,p1,p2)
00182 #define GAN_REP2_AAS_C(a,b,c) GAN_REP2_AAS(a,b,c,x,y)
00183 
00184 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00185 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00186 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00187 
00188 #define GAN_REP2_ABCS(a,b,c,d,p1,p2,q1,q2,r1,r2)\
00189            (a p1 b q1 c r1 d, a p2 b q2 c r2 d)
00190 #define GAN_REP2_ABC(a,b,c,p1,p2,q1,q2,r1,r2)\
00191            (a p1 b q1 c r1, a p2 b q2 c r2)
00192 #define GAN_REP2_AAA(a,b,c,p1,p2) GAN_REP2_ABC(a,b,c,p1,p2,p1,p2,p1,p2)
00193 #define GAN_REP2_AAA_C(a,b,c) GAN_REP2_AAA(a,b,c,x,y)
00194 
00195 #define GAN_REP2_OP_AB(a,b,p1,p2,q1,q2,op)\
00196            (a p1 b q1 op a p2 b q2)
00197 #define GAN_REP2_OP_AA(a,b,p1,p2,op) GAN_REP2_OP_AB(a,b,p1,p2,p1,p2,op)
00198 #define GAN_REP2_OP_AA_C(a,b,op) GAN_REP2_OP_AA(a,b,x,y,op)
00199 
00200 #ifdef __cplusplus
00201 }
00202 #endif
00203 
00204 #endif /* #ifndef _GAN_REPEAT2_H */
00205 
00218 /* This library is free software; you can redistribute it and/or
00219    modify it under the terms of the GNU Lesser General Public
00220    License as published by the Free Software Foundation; either
00221    version 2.1 of the License, or (at your option) any later version.
00222 
00223    This library is distributed in the hope that it will be useful,
00224    but WITHOUT ANY WARRANTY; without even the implied warranty of
00225    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00226    Lesser General Public License for more details.
00227 
00228    You should have received a copy of the GNU Lesser General Public
00229    License along with this library; if not, write to the Free Software
00230    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00231 */
00232 
00233 #ifndef _GAN_REPEAT3_H
00234 #define _GAN_REPEAT3_H
00235 
00236 #ifdef __cplusplus
00237 extern "C" {
00238 #endif
00239 
00240 /* macros for constructing three-fold repetitions */
00241 #define GAN_REP3_AS(a,b,p1,p2,p3) (a p1 b, a p2 b, a p3 b)
00242 #define GAN_REP3_AS_C(a,b) GAN_REP3_AS(a,b,x,y,z)
00243 #define GAN_REP3_A(a,p1,p2,p3) (a p1, a p2, a p3)
00244 #define GAN_REP3_A_C(a) GAN_REP3_A(a,x,y,z)
00245 
00246 #define GAN_FREP3_A(a,b,p1,p2,p3,q1,q2,q3) (a p1 b q1, a p2 b q2, a p3 b q3)
00247 #define GAN_FREP3_A_C(a,b,p1,p2,p3) GAN_FREP3_A(a,b,x,y,z,p1,p2,p3)
00248 
00249 
00250 #define GAN_REP3_ABS(a,b,c,p1,p2,p3,q1,q2,q3)\
00251            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c)
00252 #define GAN_REP3_AAS(a,b,c,p1,p2,p3) GAN_REP3_ABS(a,b,c,p1,p2,p3,p1,p2,p3)
00253 #define GAN_REP3_AAS_C(a,b,c) GAN_REP3_AAS(a,b,c,x,y,z)
00254 
00255 #define GAN_REP3_AB(a,b,p1,p2,p3,q1,q2,q3)\
00256            (a p1 b q1, a p2 b q2, a p3 b q3)
00257 #define GAN_REP3_AA(a,b,p1,p2,p3) GAN_REP3_AB(a,b,p1,p2,p3,p1,p2,p3)
00258 #define GAN_REP3_AA_C(a,b) GAN_REP3_AA(a,b,x,y,z)
00259 
00260 #define GAN_REP3_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00261            (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d)
00262 #define GAN_REP3_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00263            (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3)
00264 #define GAN_REP3_AAA(a,b,c,p1,p2,p3)\
00265         GAN_REP3_ABC(a,b,c,p1,p2,p3,p1,p2,p3,p1,p2,p3)
00266 #define GAN_REP3_AAA_C(a,b,c) GAN_REP3_AAA(a,b,c,x,y,z)
00267 
00268 #define GAN_REP3_OP_AB(a,b,p1,p2,p3,q1,q2,q3,op)\
00269            (a p1 b q1 op a p2 b q2 op a p3 b q3)
00270 #define GAN_REP3_OP_AA(a,b,p1,p2,p3,op)\
00271            GAN_REP3_OP_AB(a,b,p1,p2,p3,p1,p2,p3,op)
00272 #define GAN_REP3_OP_AA_C(a,b,op) GAN_REP3_OP_AA(a,b,x,y,z,op)
00273 
00274 #ifdef __cplusplus
00275 }
00276 #endif
00277 
00278 #endif /* #ifndef _GAN_REPEAT3_H */
00279 
00280 #ifdef __cplusplus
00281 extern "C" {
00282 #endif
00283 
00284 /* macros for constructing dual two-fold repetitions */
00285 
00286 #define GAN_FREP33_A(a,b,p1,p2,p3,q1,q2,q3,r11,r12,r13,r21,r22,r23,r31,r32,r33)            (GAN_FREP3_A(a,b,p1##q1,p1##q2,p1##q3,r11,r12,r13),\
00287              GAN_FREP3_A(a,b,p2##q1,p2##q2,p2##q3,r21,r22,r23),\
00288              GAN_FREP3_A(a,b,p3##q1,p3##q2,p3##q3,r31,r32,r33))
00289 #define GAN_FREP33_A_C(a,b,r11,r12,r13,r21,r22,r23,r31,r32,r33) \
00290            GAN_FREP33_A(a,b,x,y,z,x,y,z,r11,r12,r13,r21,r22,r23,r31,r32,r33)
00291 
00292 /* most general macros */
00293 #define GAN_REP33_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00294  (GAN_REP3_ABCS(a,b,c,d,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3,t1##u1,t1##u2,t1##u3),\
00295   GAN_REP3_ABCS(a,b,c,d,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3,t2##u1,t2##u2,t2##u3),\
00296   GAN_REP3_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00297 #define GAN_REP33_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00298  (GAN_REP3_ABC(a,b,c,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3,t1##u1,t1##u2,t1##u3),\
00299   GAN_REP3_ABC(a,b,c,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3,t2##u1,t2##u2,t2##u3),\
00300   GAN_REP3_ABC(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00301 
00302 #define GAN_REP33_AAAS(a,b,c,d,p1,p2,p3,q1,q2,q3)\
00303   GAN_REP33_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00304 #define GAN_REP33_AAA(a,b,c,p1,p2,p3,q1,q2,q3)\
00305    GAN_REP33_ABC(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00306 
00307 #define GAN_REP33_ABS(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00308  (GAN_REP3_ABS(a,b,c,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3),\
00309   GAN_REP3_ABS(a,b,c,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3),\
00310   GAN_REP3_ABS(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00311 #define GAN_REP33_AB(a,b,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00312  (GAN_REP3_AB(a,b,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3),\
00313   GAN_REP3_AB(a,b,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3),\
00314   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00315 
00316 #define GAN_REP33_AAS(a,b,c,p1,p2,p3,q1,q2,q3)\
00317             GAN_REP33_ABS(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00318 #define GAN_REP33_AA(a,b,p1,p2,p3,q1,q2,q3)\
00319             GAN_REP33_AB(a,b,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00320 
00321 #define GAN_REP33_AS(a,b,p1,p2,p3,q1,q2,q3)\
00322  (GAN_REP3_AS(a,b,p1##q1,p1##q2,p1##q3),\
00323   GAN_REP3_AS(a,b,p2##q1,p2##q2,p2##q3),\
00324   GAN_REP3_AS(a,b,p3##q1,p3##q2,p3##q3))
00325 #define GAN_REP33_A(a,p1,p2,p3,q1,q2,q3)\
00326  (GAN_REP3_A(a,p1##q1,p1##q2,p1##q3),\
00327   GAN_REP3_A(a,p2##q1,p2##q2,p2##q3),\
00328   GAN_REP3_A(a,p3##q1,p3##q2,p3##q3))
00329 
00330 /* macros specific to xx, xy etc coordinates */
00331 #define GAN_REP33_AS_C(a,b) GAN_REP33_AS(a,b,x,y,z,x,y,z)
00332 #define GAN_REP33_AAS_C(a,b,c) GAN_REP33_AAS(a,b,c,x,y,z,x,y,z)
00333 #define GAN_REP33_AAAS_C(a,b,c,d) GAN_REP33_AAAS(a,b,c,d,x,y,z,x,y,z)
00334 #define GAN_REP33_A_C(a) GAN_REP33_A(a,x,y,z,x,y,z)
00335 #define GAN_REP33_AA_C(a,b) GAN_REP33_AA(a,b,x,y,z,x,y,z)
00336 #define GAN_REP33_AAA_C(a,b,c) GAN_REP33_AAA(a,b,c,x,y,z,x,y,z)
00337 
00338 /* macro for transpose operation */
00339 #define GAN_REP33_AAT(a,b,p1,p2,p3,q1,q2,q3)\
00340  (GAN_REP3_AB(a,b,p1##q1,p1##q2,p1##q3,p1##q1,p2##q1,p3##q1),\
00341   GAN_REP3_AB(a,b,p2##q1,p2##q2,p2##q3,p1##q2,p2##q2,p3##q2),\
00342   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,p1##q3,p2##q3,p3##q3))
00343 #define GAN_REP33_AAT_C(a,b) GAN_REP33_AAT(a,b,x,y,z,x,y,z)
00344 
00345 /* macros for operations on lower triangle of matrices only */
00346 #define GAN_FREP33L_A(a,b,p1,p2,p3,q1,q2,q3,r11,r21,r22,r31,r32,r33)\
00347  (GAN_FREP1_A(a,b,p1##q1,r11),\
00348   GAN_FREP2_A(a,b,p2##q1,p2##q2,r21,r22),\
00349   GAN_FREP3_A(a,b,p3##q1,p3##q2,p3##q3,r31,r32,r33))
00350 #define GAN_FREP33L_A_C(a,b,r11,r21,r22,r31,r32,r33) \
00351            GAN_FREP33L_A(a,b,x,y,z,x,y,z,r11,r21,r22,r31,r32,r33)
00352 
00353 #define GAN_REP33L_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00354  (GAN_REP1_ABCS(a,b,c,d,p1##q1,r1##s1,t1##u1),\
00355   GAN_REP2_ABCS(a,b,c,d,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00356   GAN_REP3_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00357 #define GAN_REP33L_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00358  (GAN_REP1_ABC(a,b,c,p1##q1,r1##s1,t1##u1),\
00359   GAN_REP2_ABC(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00360   GAN_REP3_ABC(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00361 #define GAN_REP33L_AAAS(a,b,c,d,p1,p2,p3,q1,q2,q3)\
00362            GAN_REP33L_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00363 #define GAN_REP33L_AAA(a,b,c,p1,p2,p3,q1,q2,q3)\
00364            GAN_REP33L_ABC(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00365 #define GAN_REP33L_ABS(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00366  (GAN_REP1_ABS(a,b,c,p1##q1,r1##s1),\
00367   GAN_REP2_ABS(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2),\
00368   GAN_REP3_ABS(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00369 #define GAN_REP33L_AB(a,b,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00370  (GAN_REP1_AB(a,b,p1##q1,r1##s1),\
00371   GAN_REP2_AB(a,b,p2##q1,p2##q2,r2##s1,r2##s2),\
00372   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00373 #define GAN_REP33L_AAS(a,b,c,p1,p2,p3,q1,q2,q3)\
00374            GAN_REP33L_ABS(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00375 #define GAN_REP33L_AA(a,b,p1,p2,p3,q1,q2,q3)\
00376            GAN_REP33L_AB(a,b,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00377 #define GAN_REP33L_AS(a,b,p1,p2,p3,q1,q2,q3)\
00378  (GAN_REP1_AS(a,b,p1##q1),\
00379   GAN_REP2_AS(a,b,p2##q1,p2##q2),\
00380   GAN_REP3_AS(a,b,p3##q1,p3##q2,p3##q3))
00381 #define GAN_REP33L_A(a,p1,p2,p3,q1,q2,q3)\
00382  (GAN_REP1_A(a,p1##q1),\
00383   GAN_REP2_A(a,p2##q1,p2##q2),\
00384   GAN_REP3_A(a,p3##q1,p3##q2,p3##q3))
00385 #define GAN_REP33L_AS_C(a,b) GAN_REP33L_AS(a,b,x,y,z,x,y,z)
00386 #define GAN_REP33L_AAS_C(a,b,c) GAN_REP33L_AAS(a,b,c,x,y,z,x,y,z)
00387 #define GAN_REP33L_AAAS_C(a,b,c,d) GAN_REP33L_AAAS(a,b,c,d,x,y,z,x,y,z)
00388 #define GAN_REP33L_A_C(a) GAN_REP33L_A(a,x,y,z,x,y,z)
00389 #define GAN_REP33L_AA_C(a,b) GAN_REP33L_AA(a,b,x,y,z,x,y,z)
00390 #define GAN_REP33L_AAA_C(a,b,c) GAN_REP33L_AAA(a,b,c,x,y,z,x,y,z)
00391 #define GAN_FREP33L_A_C(a,b,r11,r21,r22,r31,r32,r33)\
00392            GAN_FREP33L_A(a,b,x,y,z,x,y,z,r11,r21,r22,r31,r32,r33)
00393 
00394 #ifdef __cplusplus
00395 }
00396 #endif
00397 
00398 #endif /* #ifndef _GAN_REPEAT33_H */
00399 #include <gandalf/linalg/3vectorf.h>
00400 #include <gandalf/linalg/2x2matrixf.h>
00414 /* This library is free software; you can redistribute it and/or
00415    modify it under the terms of the GNU Lesser General Public
00416    License as published by the Free Software Foundation; either
00417    version 2.1 of the License, or (at your option) any later version.
00418 
00419    This library is distributed in the hope that it will be useful,
00420    but WITHOUT ANY WARRANTY; without even the implied warranty of
00421    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00422    Lesser General Public License for more details.
00423 
00424    You should have received a copy of the GNU Lesser General Public
00425    License along with this library; if not, write to the Free Software
00426    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00427 */
00428 
00429 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00430 #include <gandalf/linalg/matf_gen.h>
00431 #include <gandalf/linalg/matf_square.h>
00432 
00433 #ifdef __cplusplus
00434 extern "C" {
00435 #endif
00436 
00447 
00448 typedef struct Gan_Matrix33_f
00449 {
00450    float xx, xy, xz,
00451          yx, yy, yz,
00452          zx, zy, zz;
00453 } Gan_Matrix33_f;
00454 
00455 #ifndef NDEBUG
00456 
00457 typedef enum { GAN_SYMMETRIC_MATRIX33_F, GAN_LOWER_TRI_MATRIX33_F }
00458  Gan_SquMatrix33Type_f;
00459 #endif /* #ifndef NDEBUG */
00460 
00462 typedef struct Gan_SquMatrix33_f
00463 {
00464 #ifndef NDEBUG
00465    /* square matrix type, for setting and checking in debug mode */
00466    Gan_SquMatrix33Type_f type;
00467 #endif /* #ifndef NDEBUG */
00468 
00469    /* matrix data */
00470    float xx,
00471          yx, yy,
00472          zx, zy, zz;
00473 } Gan_SquMatrix33_f;
00474 
00475 /* matrix definitions specific to 3x3 matrices */
00476 #define GAN_ST33F_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ)\
00477            (GAN_TEST_OP1(A,Gan_SquMatrix33_f),gan_eval((A)->type=t),\
00478             GAN_FREP33L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ)))
00479 #define GAN_ST33F_IDENT(A,t)\
00480            (GAN_TEST_OP1(A,Gan_SquMatrix33_f),gan_eval((A)->type=t),\
00481             GAN_FREP33L_A_C((A)->,=,1.0,0.0,1.0,0.0,0.0,1.0))
00482 
00483 /* generic matrix multiply operations */
00484 #define GAN_MAT33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00485  (a p1 = GAN_REP3_OP_AB(b,* c,xx,xy,xz,q1,q2,q3,+),\
00486   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,yz,q1,q2,q3,+),\
00487   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00488 #define GAN_MAT33TF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00489  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00490   a p2 = GAN_REP3_OP_AB(b,* c,xy,yy,zy,q1,q2,q3,+),\
00491   a p3 = GAN_REP3_OP_AB(b,* c,xz,yz,zz,q1,q2,q3,+))
00492 
00493 /* symmetric matrix multiply operation */
00494 #define GAN_SYM33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00495  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00496   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,zy,q1,q2,q3,+),\
00497   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00498 
00499 /* lower triangular matrix multiply operations */
00500 #define GAN_LOW33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00501  (a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00502   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00503   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00504 #define GAN_LOW33IF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00505  (a p1 =  c q1 / b xx,\
00506   a p2 = (c q2 - b yx * a p1) / b yy,\
00507   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz)
00508 
00509 /* upper triangular matrix multiply operations */
00510 #define GAN_UPP33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00511  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00512   a p2 = GAN_REP2_OP_AB(b,* c,yy,zy,q2,q3,+),\
00513   a p3 = GAN_REP1_OP_AB(b,* c,zz,q3,+))
00514 #define GAN_UPP33IF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00515  (a p3 =  c q3 / b zz,\
00516   a p2 = (c q2 - b zy * a p3) / b yy,\
00517   a p1 = (c q1 - b yx * a p2 - b zx * a p3) / b xx)
00518 
00519 /* symmetric/lower triangular square matrix definitions */
00520 #define GAN_ST33F_ZERO(A,t)\
00521            (GAN_TEST_OP1(A,Gan_SquMatrix33_f), gan_eval((A)->type=t),\
00522             GAN_REP33L_AS_C((A)->,=0.0))
00523 #define GAN_ST33F_COPY(A,B,t)\
00524            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00525             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00526             GAN_REP33L_AA_C((B)->,=(A)->))
00527 #define GAN_ST33F_SCALE(A,a,B,t)\
00528            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00529             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00530             GAN_REP33L_AAS_C((B)->,=(A)->,*(a)))
00531 #define GAN_ST33F_DIVIDE(A,a,B,t)\
00532            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00533             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00534             GAN_REP33L_AAS_C((B)->,=(A)->,/(a)))
00535 #define GAN_ST33F_NEGATE(A,B,t)\
00536            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00537             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00538             GAN_REP33L_AA_C((B)->,=-(A)->))
00539 #define GAN_ST33F_ADD(A,B,C,t)\
00540          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33_f,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00541           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00542           GAN_REP33L_AAA_C((C)->,=(A)->,+(B)->))
00543 #define GAN_ST33F_SUB(A,B,C,t)\
00544          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33_f,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00545           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00546           GAN_REP33L_AAA_C((C)->,=(A)->,-(B)->))
00547 
00548 /* declare functions specific to generic 3x3 matrices */
00562 /* This library is free software; you can redistribute it and/or
00563    modify it under the terms of the GNU Lesser General Public
00564    License as published by the Free Software Foundation; either
00565    version 2.1 of the License, or (at your option) any later version.
00566 
00567    This library is distributed in the hope that it will be useful,
00568    but WITHOUT ANY WARRANTY; without even the implied warranty of
00569    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00570    Lesser General Public License for more details.
00571 
00572    You should have received a copy of the GNU Lesser General Public
00573    License along with this library; if not, write to the Free Software
00574    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00575 */
00576 
00577 #ifndef _GAN_3X3MATF_H
00578 
00595 Gan_Matrix33_f *gan_mat33f_fill_q ( Gan_Matrix33_f *A,
00596                                     float XX, float XY, float XZ,
00597                                     float YX, float YY, float YZ,
00598                                     float ZX, float ZY, float ZZ );
00599 
00624 Gan_Matrix33_f *gan_mat33f_cross_q ( Gan_Vector3_f *p, Gan_Matrix33_f *A );
00625 
00647 void gan_mat33f_get_rows_q ( Gan_Matrix33_f *A,
00648                              Gan_Vector3_f *p, Gan_Vector3_f *q,
00649                              Gan_Vector3_f *r );
00650 
00662 void gan_mat33f_get_cols_q ( Gan_Matrix33_f *A,
00663                              Gan_Vector3_f *p, Gan_Vector3_f *q,
00664                              Gan_Vector3_f *r );
00665 
00673 Gan_Matrix22_f *gan_mat33f_get_m22tl_q ( Gan_Matrix33_f *A,
00674                                          Gan_Matrix22_f *B );
00675 
00683 Gan_Vector2_f *gan_mat33f_get_v2tr_q ( Gan_Matrix33_f *A, Gan_Vector2_f *p );
00684 
00698 void gan_mat33f_get_parts_q ( Gan_Matrix33_f *A, Gan_Matrix22_f *B,
00699                               Gan_Vector2_f *p, Gan_Vector2_f *q, float *s );
00700 
00723 Gan_Matrix33_f *gan_mat33f_set_parts_q ( Gan_Matrix33_f *A, Gan_Matrix22_f *B,
00724                                          Gan_Vector2_f *p, Gan_Vector2_f *q,
00725                                          float s );
00726 
00738 Gan_Matrix33_f *gan_mat33f_set_cols_q ( Gan_Matrix33_f *A,
00739                                         Gan_Vector3_f *p, Gan_Vector3_f *q,
00740                                         Gan_Vector3_f *r );
00741 
00754 Gan_Matrix33_f *gan_mat33f_set_rows_q ( Gan_Matrix33_f *A,
00755                                         Gan_Vector3_f *p, Gan_Vector3_f *q,
00756                                         Gan_Vector3_f *r );
00757 
00763 #endif /* #ifndef _GAN_3X3MATF_H */
00764 
00765 #define GAN_MATTYPE Gan_Matrix33_f
00766 #define GAN_MATRIX_TYPE Gan_Matrix_f
00767 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00768 #define GAN_VECTOR_TYPE Gan_Vector_f
00769 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00770 #define GAN_REALTYPE float
00771 #define GAN_VECTYPE1 Gan_Vector3_f
00772 #define GAN_VECTYPE2 Gan_Vector3_f
00773 #define GAN_MATTYPEL Gan_Matrix33_f
00774 #define GAN_MATTYPER Gan_Matrix33_f
00775 #define GAN_SQUMATTYPEL Gan_SquMatrix33_f
00776 #define GAN_SQUMATTYPER Gan_SquMatrix33_f
00777 #define GAN_MAT_FPRINT                     gan_mat33f_fprint
00778 #define GAN_MAT_PRINT                      gan_mat33f_print
00779 #define GAN_MAT_FSCANF                     gan_mat33f_fscanf
00780 #define GAN_MAT_FWRITE                     gan_mat33f_fwrite
00781 #define GAN_MAT_FREAD                      gan_mat33f_fread
00782 #define GAN_MAT_ZERO_Q                     gan_mat33f_zero_q
00783 #define GAN_MAT_ZERO_S                     gan_mat33f_zero_s
00784 #define GAN_MAT_COPY_Q                     gan_mat33f_copy_q
00785 #define GAN_MAT_COPY_S                     gan_mat33f_copy_s
00786 #define GAN_MAT_SCALE_Q                    gan_mat33f_scale_q
00787 #define GAN_MAT_SCALE_I                    gan_mat33f_scale_i
00788 #define GAN_MAT_SCALE_S                    gan_mat33f_scale_s
00789 #define GAN_MAT_DIVIDE_Q                   gan_mat33f_divide_q
00790 #define GAN_MAT_DIVIDE_I                   gan_mat33f_divide_i
00791 #define GAN_MAT_DIVIDE_S                   gan_mat33f_divide_s
00792 #define GAN_MAT_NEGATE_Q                   gan_mat33f_negate_q
00793 #define GAN_MAT_NEGATE_I                   gan_mat33f_negate_i
00794 #define GAN_MAT_NEGATE_S                   gan_mat33f_negate_s
00795 #define GAN_MAT_UNIT_Q                     gan_mat33f_unit_q
00796 #define GAN_MAT_UNIT_I                     gan_mat33f_unit_i
00797 #define GAN_MAT_UNIT_S                     gan_mat33f_unit_s
00798 #define GAN_MAT_ADD_Q                      gan_mat33f_add_q
00799 #define GAN_MAT_ADD_I1                     gan_mat33f_add_i1
00800 #define GAN_MAT_ADD_I2                     gan_mat33f_add_i2
00801 #define GAN_MAT_INCREMENT                  gan_mat33f_increment
00802 #define GAN_MAT_ADD_S                      gan_mat33f_add_s
00803 #define GAN_MAT_SUB_Q                      gan_mat33f_sub_q
00804 #define GAN_MAT_SUB_I1                     gan_mat33f_sub_i1
00805 #define GAN_MAT_SUB_I2                     gan_mat33f_sub_i2
00806 #define GAN_MAT_DECREMENT                  gan_mat33f_decrement
00807 #define GAN_MAT_SUB_S                      gan_mat33f_sub_s
00808 #define GAN_VEC_OUTER_Q                    gan_vec33f_outer_q
00809 #define GAN_VEC_OUTER_S                    gan_vec33f_outer_s
00810 #define GAN_MAT_MULTV_Q                    gan_mat33f_multv3_q
00811 #define GAN_MAT_MULTV_S                    gan_mat33f_multv3_s
00812 #define GAN_MATT_MULTV_Q                   gan_mat33Tf_multv3_q
00813 #define GAN_MATT_MULTV_S                   gan_mat33Tf_multv3_s
00814 #define GAN_MAT_LMULTMT_Q                  gan_mat33f_lmultm33T_q
00815 #define GAN_MAT_LMULTMT_S                  gan_mat33f_lmultm33T_s
00816 #define GAN_MAT_RMULTM_Q                   gan_mat33f_rmultm33_q
00817 #define GAN_MAT_RMULTM_S                   gan_mat33f_rmultm33_s
00818 #define GAN_MAT_RMULTMT_Q                  gan_mat33f_rmultm33T_q
00819 #define GAN_MAT_RMULTMT_S                  gan_mat33f_rmultm33T_s
00820 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat33f_lmultm33T_sym_q
00821 #define GAN_MAT_LMULTMT_SYM_S              gan_mat33f_lmultm33T_sym_s
00822 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat33f_rmultm33T_sym_q
00823 #define GAN_MAT_RMULTMT_SYM_S              gan_mat33f_rmultm33T_sym_s
00824 #define GAN_MAT_SLMULTT_Q                  gan_mat33f_slmultT_q
00825 #define GAN_MAT_SLMULTT_S                  gan_mat33f_slmultT_s
00826 #define GAN_MAT_SRMULTT_Q                  gan_mat33f_srmultT_q
00827 #define GAN_MAT_SRMULTT_S                  gan_mat33f_srmultT_s
00828 #define GAN_MAT_LMULTS_Q                   gan_mat33f_lmults33_q
00829 #define GAN_MAT_LMULTS_S                   gan_mat33f_lmults33_s
00830 #define GAN_MAT_RMULTS_Q                   gan_mat33f_rmults33_q
00831 #define GAN_MAT_RMULTS_S                   gan_mat33f_rmults33_s
00832 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33f_lrmultm33T_q
00833 #define GAN_SYMMATL_LRMULT_S               gan_symmat33f_lrmultm33T_s
00834 #define GAN_SYMMATR_LRMULT_Q               gan_symmat33f_lrmultm33_q
00835 #define GAN_SYMMATR_LRMULT_S               gan_symmat33f_lrmultm33_s
00836 #define GAN_MAT_LMULTL_Q                   gan_mat33f_lmultl33_q
00837 #define GAN_MAT_LMULTL_S                   gan_mat33f_lmultl33_s
00838 #define GAN_MAT_LMULTL_I                   gan_mat33f_lmultl33_i
00839 #define GAN_MAT_LMULTLI_Q                  gan_mat33f_lmultl33I_q
00840 #define GAN_MAT_LMULTLI_S                  gan_mat33f_lmultl33I_s
00841 #define GAN_MAT_LMULTLI_I                  gan_mat33f_lmultl33I_i
00842 #define GAN_MAT_LMULTLT_Q                  gan_mat33f_lmultl33T_q
00843 #define GAN_MAT_LMULTLT_S                  gan_mat33f_lmultl33T_s
00844 #define GAN_MAT_LMULTLT_I                  gan_mat33f_lmultl33T_i
00845 #define GAN_MAT_LMULTLIT_Q                 gan_mat33f_lmultl33IT_q
00846 #define GAN_MAT_LMULTLIT_S                 gan_mat33f_lmultl33IT_s
00847 #define GAN_MAT_LMULTLIT_I                 gan_mat33f_lmultl33IT_i
00848 #define GAN_MAT_RMULTL_Q                   gan_mat33f_rmultl33_q
00849 #define GAN_MAT_RMULTL_S                   gan_mat33f_rmultl33_s
00850 #define GAN_MAT_RMULTL_I                   gan_mat33f_rmultl33_i
00851 #define GAN_MAT_RMULTLI_Q                  gan_mat33f_rmultl33I_q
00852 #define GAN_MAT_RMULTLI_S                  gan_mat33f_rmultl33I_s
00853 #define GAN_MAT_RMULTLI_I                  gan_mat33f_rmultl33I_i
00854 #define GAN_MAT_RMULTLT_Q                  gan_mat33f_rmultl33T_q
00855 #define GAN_MAT_RMULTLT_S                  gan_mat33f_rmultl33T_s
00856 #define GAN_MAT_RMULTLT_I                  gan_mat33f_rmultl33T_i
00857 #define GAN_MAT_RMULTLIT_Q                 gan_mat33f_rmultl33IT_q
00858 #define GAN_MAT_RMULTLIT_S                 gan_mat33f_rmultl33IT_s
00859 #define GAN_MAT_RMULTLIT_I                 gan_mat33f_rmultl33IT_i
00860 #define GAN_MAT_SUMSQR_Q                   gan_mat33f_sumsqr_q
00861 #define GAN_MAT_SUMSQR_S                   gan_mat33f_sumsqr_s
00862 #define GAN_MAT_FNORM_Q                    gan_mat33f_Fnorm_q
00863 #define GAN_MAT_FNORM_S                    gan_mat33f_Fnorm_s
00864 #define GAN_MAT_FROM_MAT_Q                 gan_mat33f_from_matf_q
00865 #define GAN_MAT_FROM_MAT_S                 gan_mat33f_from_matf_s
00866 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat33f_from_squmatf_q
00867 #define GAN_MAT_FROM_SQUMAT_S              gan_mat33f_from_squmatf_s
00868 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat33f_from_squmatf_q
00869 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat33f_from_squmatf_s
00870 
00871 #define GAN_SQUMAT_IDENT_Q    gan_mat33f_ident_q
00872 #define GAN_SQUMAT_IDENT_S    gan_mat33f_ident_s
00873 #define GAN_SQUMAT_TPOSE_Q    gan_mat33f_tpose_q
00874 #define GAN_SQUMAT_TPOSE_S    gan_mat33f_tpose_s
00875 #define GAN_SQUMAT_TPOSE_I    gan_mat33f_tpose_i
00876 #define GAN_MAT_SADDT_Q       gan_mat33f_saddT_q
00877 #define GAN_MAT_SADDT_S       gan_mat33f_saddT_s
00878 #define GAN_SQUMAT_INVERT     gan_mat33f_invert
00879 #define GAN_SQUMAT_INVERT_Q   gan_mat33f_invert_q
00880 #define GAN_SQUMAT_INVERT_S   gan_mat33f_invert_s
00881 #define GAN_SQUMAT_INVERT_I   gan_mat33f_invert_i
00882 #define GAN_SQUMAT_ADJOINT_Q  gan_mat33f_adjoint_q
00883 #define GAN_SQUMAT_ADJOINT_S  gan_mat33f_adjoint_s
00884 #define GAN_SQUMAT_ADJOINTT_Q gan_mat33f_adjointT_q
00885 #define GAN_SQUMAT_ADJOINTT_S gan_mat33f_adjointT_s
00886 #define GAN_SQUMAT_DET_Q      gan_mat33f_det_q
00887 #define GAN_SQUMAT_DET_S      gan_mat33f_det_s
00888 #define GAN_SQUMAT_TRACE_Q    gan_mat33f_trace_q
00889 #define GAN_SQUMAT_TRACE_S    gan_mat33f_trace_s
00890 
00891 #ifndef _GAN_3X3MATF_H
00892 #define _GAN_3X3MATF_H
00893 
00894 
00895 #endif /* #ifndef _GAN_3X3MATF_H */
00896 
00909 /* This library is free software; you can redistribute it and/or
00910    modify it under the terms of the GNU Lesser General Public
00911    License as published by the Free Software Foundation; either
00912    version 2.1 of the License, or (at your option) any later version.
00913 
00914    This library is distributed in the hope that it will be useful,
00915    but WITHOUT ANY WARRANTY; without even the implied warranty of
00916    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00917    Lesser General Public License for more details.
00918 
00919    You should have received a copy of the GNU Lesser General Public
00920    License along with this library; if not, write to the Free Software
00921    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00922 */
00923 
00924 /* function declarations for functions common to all small square matrix
00925  * types */
00926 
00927 
00928 
00929 /* documentation for macros defined in individual header files */
00930 
00943 Gan_Matrix33_f *gan_mat33f_ident_q ( Gan_Matrix33_f *A );
00944 
00962 Gan_Matrix33_f *gan_mat33f_tpose_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
00963 
00981 Gan_SquMatrix33_f *gan_mat33f_saddT_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
00982 
01013 Gan_Matrix33_f *gan_mat33f_invert_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01014 
01023 Gan_Matrix33_f *gan_mat33f_invert_i ( Gan_Matrix33_f *A );
01024 
01039 float gan_mat33f_det_q ( Gan_Matrix33_f *A );
01040 
01046 float gan_mat33f_trace_q ( Gan_Matrix33_f *A );
01047 
01053 #undef GAN_SQUMAT_IDENT_Q
01054 #undef GAN_SQUMAT_IDENT_S
01055 #undef GAN_SQUMAT_TPOSE_Q
01056 #undef GAN_SQUMAT_TPOSE_S
01057 #undef GAN_SQUMAT_TPOSE_I
01058 #undef GAN_MAT_SADDT_Q
01059 #undef GAN_MAT_SADDT_S
01060 #undef GAN_SQUMATI_MULTV_Q
01061 #undef GAN_SQUMATI_MULTV_S
01062 #undef GAN_SQUMATI_MULTV_I
01063 #undef GAN_SQUMATIT_MULTV_Q
01064 #undef GAN_SQUMATIT_MULTV_S
01065 #undef GAN_SQUMATIT_MULTV_I
01066 #undef GAN_SQUMAT_INVERT
01067 #undef GAN_SQUMAT_INVERT_Q
01068 #undef GAN_SQUMAT_INVERT_S
01069 #undef GAN_SQUMAT_INVERT_I
01070 #undef GAN_SQUMAT_ADJOINT_Q
01071 #undef GAN_SQUMAT_ADJOINT_S
01072 #undef GAN_SQUMAT_ADJOINTT_Q
01073 #undef GAN_SQUMAT_ADJOINTT_S
01074 #undef GAN_SQUMAT_DET_Q
01075 #undef GAN_SQUMAT_DET_S
01076 #undef GAN_SQUMAT_TRACE_Q
01077 #undef GAN_SQUMAT_TRACE_S
01078 
01091 /* This library is free software; you can redistribute it and/or
01092    modify it under the terms of the GNU Lesser General Public
01093    License as published by the Free Software Foundation; either
01094    version 2.1 of the License, or (at your option) any later version.
01095 
01096    This library is distributed in the hope that it will be useful,
01097    but WITHOUT ANY WARRANTY; without even the implied warranty of
01098    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01099    Lesser General Public License for more details.
01100 
01101    You should have received a copy of the GNU Lesser General Public
01102    License along with this library; if not, write to the Free Software
01103    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01104 */
01105 
01106 /* function declarations for functions common to all small vector types */
01107 
01108 
01109 
01110 /* documentation for macros defined in individual header files */
01111 
01122 Gan_Matrix33_f *gan_mat33f_zero_q ( Gan_Matrix33_f *A );
01123 
01140 Gan_Matrix33_f *gan_mat33f_copy_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01141 
01159 Gan_Matrix33_f *gan_mat33f_scale_q ( Gan_Matrix33_f *A, float a,
01160                                Gan_Matrix33_f *B );
01161 
01169 Gan_Matrix33_f *gan_mat33f_scale_i ( Gan_Matrix33_f *A, float a );
01170 
01179 Gan_Matrix33_f *gan_mat33f_divide_q ( Gan_Matrix33_f *A, float a,
01180                                 Gan_Matrix33_f *B );
01181 
01189 Gan_Matrix33_f *gan_mat33f_divide_i ( Gan_Matrix33_f *A, float a );
01190 
01198 Gan_Matrix33_f *gan_mat33f_negate_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01199 
01207 Gan_Matrix33_f *gan_mat33f_negate_i ( Gan_Matrix33_f *A );
01208 
01216 Gan_Matrix33_f *gan_mat33f_unit_i ( Gan_Matrix33_f *A );
01217 
01235 Gan_Matrix33_f *gan_mat33f_add_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B, Gan_Matrix33_f *C );
01236 
01245 Gan_Matrix33_f *gan_mat33f_add_i1 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01246 
01255 Gan_Matrix33_f *gan_mat33f_add_i2 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01256 
01265 Gan_Matrix33_f *gan_mat33f_increment ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01266 
01284 Gan_Matrix33_f *gan_mat33f_sub_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B, Gan_Matrix33_f *C );
01285 
01294 Gan_Matrix33_f *gan_mat33f_sub_i1 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01295 
01304 Gan_Matrix33_f *gan_mat33f_sub_i2 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01305 
01314 Gan_Matrix33_f *gan_mat33f_decrement ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01315 
01333 Gan_Matrix33_f *gan_vec33f_outer_q ( Gan_Vector3_f *p, Gan_Vector3_f *q,
01334                                Gan_Matrix33_f *A );
01335 
01344 Gan_Vector3_f *gan_mat33f_multv3_q ( Gan_Matrix33_f *A, Gan_Vector3_f *p,
01345                                 Gan_Vector3_f *q );
01346 
01347 
01356 Gan_Vector3_f *gan_mat33Tf_multv3_q ( Gan_Matrix33_f *A, Gan_Vector3_f *p,
01357                                  Gan_Vector3_f *q );
01358 
01359 
01379 Gan_Matrix33_f *gan_mat33f_lmultm33T_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B,
01380                                  Gan_Matrix33_f *C );
01381 
01391 Gan_Matrix33_f *gan_mat33f_rmultm33_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B,
01392                                 Gan_Matrix33_f *C );
01393 
01403 Gan_Matrix33_f *gan_mat33f_rmultm33T_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B,
01404                                  Gan_Matrix33_f *C );
01405 
01417 Gan_SquMatrix33_f *gan_mat33f_lmultm33T_sym_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B,
01418                                          Gan_SquMatrix33_f *C );
01419 
01431 Gan_SquMatrix33_f *gan_mat33f_rmultm33T_sym_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B,
01432                                          Gan_SquMatrix33_f *C );
01433 
01442 Gan_Matrix33_f *gan_mat33f_lmults33_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01443                                 Gan_Matrix33_f *C );
01444 
01453 Gan_Matrix33_f *gan_mat33f_rmults33_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01454                                 Gan_Matrix33_f *C );
01455 
01475 Gan_SquMatrix33_f *gan_symmat33f_lrmultm33T_q ( Gan_SquMatrix33_f *A, Gan_Matrix33_f *B,
01476                                         Gan_Matrix33_f *C, Gan_SquMatrix33_f *D );
01477 
01488 Gan_SquMatrix33_f *gan_symmat33f_lrmultm33_q ( Gan_SquMatrix33_f *A, Gan_Matrix33_f *B,
01489                                         Gan_Matrix33_f *C, Gan_SquMatrix33_f *D );
01490 
01509 Gan_Matrix33_f *gan_mat33f_lmultl33_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01510                                 Gan_Matrix33_f *C );
01511 
01521 Gan_Matrix33_f *gan_mat33f_lmultl33I_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01522                                  Gan_Matrix33_f *C );
01523 
01533 Gan_Matrix33_f *gan_mat33f_lmultl33T_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01534                                  Gan_Matrix33_f *C );
01535 
01545 Gan_Matrix33_f *gan_mat33f_lmultl33IT_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01546                                   Gan_Matrix33_f *C );
01547 
01557 Gan_Matrix33_f *gan_mat33f_rmultl33_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01558                                 Gan_Matrix33_f *C );
01559 
01569 Gan_Matrix33_f *gan_mat33f_rmultl33I_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01570                                  Gan_Matrix33_f *C );
01571 
01581 Gan_Matrix33_f *gan_mat33f_rmultl33T_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01582                                  Gan_Matrix33_f *C );
01583 
01593 Gan_Matrix33_f *gan_mat33f_rmultl33IT_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B,
01594                                   Gan_Matrix33_f *C );
01595 
01605 Gan_Matrix33_f *gan_mat33f_lmultl33_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01606 
01616 Gan_Matrix33_f *gan_mat33f_lmultl33I_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01617 
01627 Gan_Matrix33_f *gan_mat33f_lmultl33T_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01628 
01638 Gan_Matrix33_f *gan_mat33f_lmultl33IT_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01639 
01649 Gan_Matrix33_f *gan_mat33f_rmultl33_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01650 
01660 Gan_Matrix33_f *gan_mat33f_rmultl33I_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01661 
01671 Gan_Matrix33_f *gan_mat33f_rmultl33T_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01672 
01682 Gan_Matrix33_f *gan_mat33f_rmultl33IT_i ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01683 
01692 Gan_SquMatrix33_f *gan_mat33f_slmultT_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01693 
01694 
01703 Gan_SquMatrix33_f *gan_mat33f_srmultT_q ( Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01704 
01705 
01720 float gan_mat33f_sumsqr_q ( Gan_Matrix33_f *A );
01721 
01728 float gan_mat33f_Fnorm_q ( Gan_Matrix33_f *A );
01729 
01747 Gan_Matrix33_f *gan_mat33f_from_matf_q ( Gan_Matrix_f *A, Gan_Matrix33_f *B );
01748 
01757 Gan_Matrix33_f *gan_mat33f_from_squmatf_q ( Gan_SquMatrix_f *A, Gan_Matrix33_f *B );
01758 
01767 Gan_SquMatrix33_f *gan_squmat33f_from_squmatf_q ( Gan_SquMatrix_f *A,
01768                                             Gan_SquMatrix33_f *B );
01769 
01788 /* This library is free software; you can redistribute it and/or
01789    modify it under the terms of the GNU Lesser General Public
01790    License as published by the Free Software Foundation; either
01791    version 2.1 of the License, or (at your option) any later version.
01792 
01793    This library is distributed in the hope that it will be useful,
01794    but WITHOUT ANY WARRANTY; without even the implied warranty of
01795    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01796    Lesser General Public License for more details.
01797 
01798    You should have received a copy of the GNU Lesser General Public
01799    License along with this library; if not, write to the Free Software
01800    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01801 */
01802 
01803 #undef GAN_MATTYPE
01804 #undef GAN_MATRIX_TYPE
01805 #undef GAN_SQUMATRIX_TYPE
01806 #undef GAN_VECTOR_TYPE
01807 #undef GAN_MAT_ELEMENT_TYPE
01808 #undef GAN_REALTYPE
01809 #undef GAN_VECTYPE1
01810 #undef GAN_VECTYPE2
01811 #undef GAN_MATTYPEL
01812 #undef GAN_MATTYPER
01813 #undef GAN_SQUMATTYPEL
01814 #undef GAN_SQUMATTYPER
01815 #undef GAN_FIXED_MATRIX_TYPE
01816 #undef GAN_MAT_FPRINT
01817 #undef GAN_MAT_PRINT
01818 #undef GAN_MAT_FSCANF
01819 #undef GAN_MAT_FWRITE
01820 #undef GAN_MAT_FREAD
01821 #undef GAN_MAT_ZERO_Q
01822 #undef GAN_MAT_ZERO_S
01823 #undef GAN_MAT_COPY_Q
01824 #undef GAN_MAT_COPY_S
01825 #undef GAN_MAT_SCALE_Q
01826 #undef GAN_MAT_SCALE_S
01827 #undef GAN_MAT_SCALE_I
01828 #undef GAN_MAT_DIVIDE_Q
01829 #undef GAN_MAT_DIVIDE_S
01830 #undef GAN_MAT_DIVIDE_I
01831 #undef GAN_MAT_NEGATE_Q
01832 #undef GAN_MAT_NEGATE_S
01833 #undef GAN_MAT_NEGATE_I
01834 #undef GAN_MAT_UNIT_Q
01835 #undef GAN_MAT_UNIT_S
01836 #undef GAN_MAT_UNIT_I
01837 #undef GAN_MAT_ADD_Q
01838 #undef GAN_MAT_ADD_I1
01839 #undef GAN_MAT_ADD_I2
01840 #undef GAN_MAT_INCREMENT
01841 #undef GAN_MAT_ADD_S
01842 #undef GAN_MAT_SUB_Q
01843 #undef GAN_MAT_SUB_I1
01844 #undef GAN_MAT_SUB_I2
01845 #undef GAN_MAT_DECREMENT
01846 #undef GAN_MAT_SUB_S
01847 #undef GAN_VEC_OUTER_Q
01848 #undef GAN_VEC_OUTER_S
01849 #undef GAN_MAT_MULTV_Q
01850 #undef GAN_MAT_MULTV_S
01851 #undef GAN_MAT_MULTV_I
01852 #undef GAN_MATT_MULTV_Q
01853 #undef GAN_MATT_MULTV_S
01854 #undef GAN_MATT_MULTV_I
01855 #undef GAN_MAT_LMULTM_Q
01856 #undef GAN_MAT_LMULTM_S
01857 #undef GAN_MAT_LMULTMT_Q
01858 #undef GAN_MAT_LMULTMT_S
01859 #undef GAN_MAT_RMULTM_Q
01860 #undef GAN_MAT_RMULTM_S
01861 #undef GAN_MAT_RMULTMT_Q
01862 #undef GAN_MAT_RMULTMT_S
01863 #undef GAN_MAT_LMULTMT_SYM_Q
01864 #undef GAN_MAT_LMULTMT_SYM_S
01865 #undef GAN_MAT_RMULTMT_SYM_Q
01866 #undef GAN_MAT_RMULTMT_SYM_S
01867 #undef GAN_MAT_LMULTS_Q
01868 #undef GAN_MAT_LMULTS_S
01869 #undef GAN_MAT_RMULTS_Q
01870 #undef GAN_MAT_RMULTS_S
01871 #undef GAN_SYMMATL_LRMULT_Q
01872 #undef GAN_SYMMATL_LRMULT_S
01873 #undef GAN_SYMMATR_LRMULT_Q
01874 #undef GAN_SYMMATR_LRMULT_S
01875 #undef GAN_MAT_LMULTL_Q
01876 #undef GAN_MAT_LMULTL_S
01877 #undef GAN_MAT_LMULTL_I
01878 #undef GAN_MAT_LMULTLI_Q
01879 #undef GAN_MAT_LMULTLI_S
01880 #undef GAN_MAT_LMULTLI_I
01881 #undef GAN_MAT_LMULTLT_Q
01882 #undef GAN_MAT_LMULTLT_S
01883 #undef GAN_MAT_LMULTLT_I
01884 #undef GAN_MAT_LMULTLIT_Q
01885 #undef GAN_MAT_LMULTLIT_S
01886 #undef GAN_MAT_LMULTLIT_I
01887 #undef GAN_MAT_RMULTL_Q
01888 #undef GAN_MAT_RMULTL_S
01889 #undef GAN_MAT_RMULTL_I
01890 #undef GAN_MAT_RMULTLI_Q
01891 #undef GAN_MAT_RMULTLI_S
01892 #undef GAN_MAT_RMULTLI_I
01893 #undef GAN_MAT_RMULTLT_Q
01894 #undef GAN_MAT_RMULTLT_S
01895 #undef GAN_MAT_RMULTLT_I
01896 #undef GAN_MAT_RMULTLIT_Q
01897 #undef GAN_MAT_RMULTLIT_S
01898 #undef GAN_MAT_RMULTLIT_I
01899 #undef GAN_MAT_SRMULTT_Q
01900 #undef GAN_MAT_SRMULTT_S
01901 #undef GAN_MAT_SRMULTT_I
01902 #undef GAN_MAT_SLMULTT_Q
01903 #undef GAN_MAT_SLMULTT_S
01904 #undef GAN_MAT_SLMULTT_I
01905 #undef GAN_MAT_RMULTLIT_S
01906 #undef GAN_MAT_SUMSQR_Q
01907 #undef GAN_MAT_SUMSQR_S
01908 #undef GAN_MAT_FNORM_Q
01909 #undef GAN_MAT_FNORM_S
01910 #undef GAN_MAT_FROM_MAT_Q
01911 #undef GAN_MAT_FROM_MAT_S
01912 #undef GAN_MAT_FROM_SQUMAT_Q
01913 #undef GAN_MAT_FROM_SQUMAT_S
01914 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01915 #undef GAN_SQUMAT_FROM_SQUMAT_S
01916 
01917 /* declare functions specific to symmetric 3x3 matrices */
01931 /* This library is free software; you can redistribute it and/or
01932    modify it under the terms of the GNU Lesser General Public
01933    License as published by the Free Software Foundation; either
01934    version 2.1 of the License, or (at your option) any later version.
01935 
01936    This library is distributed in the hope that it will be useful,
01937    but WITHOUT ANY WARRANTY; without even the implied warranty of
01938    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01939    Lesser General Public License for more details.
01940 
01941    You should have received a copy of the GNU Lesser General Public
01942    License along with this library; if not, write to the Free Software
01943    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01944 */
01945 
01946 #ifndef _GAN_3X3SYMMATF_H
01947 
01961 Gan_SquMatrix33_f *gan_symmat33f_fill_q ( Gan_SquMatrix33_f *A,
01962                                           float XX,
01963                                           float YX, float YY,
01964                                           float ZX, float ZY, float ZZ );
01965 
01987 void gan_symmat33f_get_parts_q ( Gan_SquMatrix33_f *A,
01988                                  Gan_SquMatrix22_f *B, Gan_Vector2_f *p,
01989                                  float *s );
01990 
02013 Gan_SquMatrix33_f *gan_symmat33f_set_parts_q ( Gan_SquMatrix33_f *A,
02014                                                Gan_SquMatrix22_f *B,
02015                                                Gan_Vector2_f *p, float s );
02016 
02022 #endif /* #ifndef _GAN_3X3SYMMATF_H */
02023 
02024 #define GAN_MATTYPE Gan_SquMatrix33_f
02025 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02026 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02027 #define GAN_VECTOR_TYPE Gan_Vector_f
02028 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02029 #define GAN_REALTYPE float
02030 #define GAN_VECTYPE1 Gan_Vector3_f
02031 #define GAN_VECTYPE2 Gan_Vector3_f
02032 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX33_F
02033 #define GAN_MAT_FPRINT      gan_symmat33f_fprint
02034 #define GAN_MAT_PRINT       gan_symmat33f_print
02035 #define GAN_MAT_FSCANF      gan_symmat33f_fscanf
02036 #define GAN_MAT_FWRITE      gan_symmat33f_fwrite
02037 #define GAN_MAT_FREAD       gan_symmat33f_fread
02038 #define GAN_MAT_ZERO_Q      gan_symmat33f_zero_q
02039 #define GAN_MAT_ZERO_S      gan_symmat33f_zero_s
02040 #define GAN_MAT_COPY_Q      gan_symmat33f_copy_q
02041 #define GAN_MAT_COPY_S      gan_symmat33f_copy_s
02042 #define GAN_MAT_SCALE_Q     gan_symmat33f_scale_q
02043 #define GAN_MAT_SCALE_S     gan_symmat33f_scale_s
02044 #define GAN_MAT_SCALE_I     gan_symmat33f_scale_i
02045 #define GAN_MAT_DIVIDE_Q    gan_symmat33f_divide_q
02046 #define GAN_MAT_DIVIDE_S    gan_symmat33f_divide_s
02047 #define GAN_MAT_DIVIDE_I    gan_symmat33f_divide_i
02048 #define GAN_MAT_NEGATE_Q    gan_symmat33f_negate_q
02049 #define GAN_MAT_NEGATE_S    gan_symmat33f_negate_s
02050 #define GAN_MAT_NEGATE_I    gan_symmat33f_negate_i
02051 #define GAN_MAT_UNIT_Q      gan_symmat33f_unit_q
02052 #define GAN_MAT_UNIT_S      gan_symmat33f_unit_s
02053 #define GAN_MAT_UNIT_I      gan_symmat33f_unit_i
02054 #define GAN_MAT_ADD_Q       gan_symmat33f_add_q
02055 #define GAN_MAT_ADD_I1      gan_symmat33f_add_i1
02056 #define GAN_MAT_ADD_I2      gan_symmat33f_add_i2
02057 #define GAN_MAT_INCREMENT   gan_symmat33f_increment
02058 #define GAN_MAT_ADD_S       gan_symmat33f_add_s
02059 #define GAN_MAT_SUB_Q       gan_symmat33f_sub_q
02060 #define GAN_MAT_SUB_I1      gan_symmat33f_sub_i1
02061 #define GAN_MAT_SUB_I2      gan_symmat33f_sub_i2
02062 #define GAN_MAT_DECREMENT   gan_symmat33f_decrement
02063 #define GAN_MAT_SUB_S       gan_symmat33f_sub_s
02064 #define GAN_MAT_MULTV_Q     gan_symmat33f_multv3_q
02065 #define GAN_MAT_MULTV_S     gan_symmat33f_multv3_s
02066 #define GAN_MAT_SUMSQR_Q    gan_symmat33f_sumsqr_q
02067 #define GAN_MAT_SUMSQR_S    gan_symmat33f_sumsqr_s
02068 #define GAN_MAT_FNORM_Q     gan_symmat33f_Fnorm_q
02069 #define GAN_MAT_FNORM_S     gan_symmat33f_Fnorm_s
02070 
02071 #define GAN_SQUMAT_IDENT_Q    gan_symmat33f_ident_q
02072 #define GAN_SQUMAT_IDENT_S    gan_symmat33f_ident_s
02073 #define GAN_SQUMAT_INVERT     gan_symmat33f_invert
02074 #define GAN_SQUMAT_INVERT_Q   gan_symmat33f_invert_q
02075 #define GAN_SQUMAT_INVERT_S   gan_symmat33f_invert_s
02076 #define GAN_SQUMAT_INVERT_I   gan_symmat33f_invert_i
02077 #define GAN_SQUMAT_DET_Q      gan_symmat33f_det_q
02078 #define GAN_SQUMAT_DET_S      gan_symmat33f_det_s
02079 #define GAN_SQUMAT_TRACE_Q    gan_symmat33f_trace_q
02080 #define GAN_SQUMAT_TRACE_S    gan_symmat33f_trace_s
02081 
02082 #define GAN_VEC_OUTER_SYM_Q gan_vec33f_outer_sym_q
02083 #define GAN_VEC_OUTER_SYM_S gan_vec33f_outer_sym_s
02084 #define GAN_SYMMAT_CHOLESKY   gan_symmat33f_cholesky
02085 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat33f_cholesky_q
02086 #define GAN_SYMMAT_CHOLESKY_S gan_symmat33f_cholesky_s
02087 #define GAN_SYMMAT_CHOLESKY_I gan_symmat33f_cholesky_i
02088 
02089 #ifndef _GAN_3X3SYMMATF_H
02090 #define _GAN_3X3SYMMATF_H
02091 
02092 
02093 #endif /* #ifndef _GAN_3X3SYMMATF_H */
02094 
02107 /* This library is free software; you can redistribute it and/or
02108    modify it under the terms of the GNU Lesser General Public
02109    License as published by the Free Software Foundation; either
02110    version 2.1 of the License, or (at your option) any later version.
02111 
02112    This library is distributed in the hope that it will be useful,
02113    but WITHOUT ANY WARRANTY; without even the implied warranty of
02114    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02115    Lesser General Public License for more details.
02116 
02117    You should have received a copy of the GNU Lesser General Public
02118    License along with this library; if not, write to the Free Software
02119    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02120 */
02121 
02122 /* function declarations for functions common to all small symmetric matrix
02123  * types */
02124 
02125 
02126 
02127 /* documentation for macros defined in individual header files */
02128 
02139 Gan_SquMatrix33_f *gan_vec33f_outer_sym_q ( Gan_Vector3_f *p, Gan_SquMatrix33_f *A );
02140 
02162 Gan_SquMatrix33_f *gan_symmat33f_cholesky_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02163 
02172 Gan_SquMatrix33_f *gan_symmat33f_cholesky_i ( Gan_SquMatrix33_f *A );
02173 
02179 #undef GAN_VEC_OUTER_SYM_Q
02180 #undef GAN_VEC_OUTER_SYM_S
02181 #undef GAN_SYMMAT_CHOLESKY
02182 #undef GAN_SYMMAT_CHOLESKY_Q
02183 #undef GAN_SYMMAT_CHOLESKY_S
02184 #undef GAN_SYMMAT_CHOLESKY_I
02185 
02198 /* This library is free software; you can redistribute it and/or
02199    modify it under the terms of the GNU Lesser General Public
02200    License as published by the Free Software Foundation; either
02201    version 2.1 of the License, or (at your option) any later version.
02202 
02203    This library is distributed in the hope that it will be useful,
02204    but WITHOUT ANY WARRANTY; without even the implied warranty of
02205    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02206    Lesser General Public License for more details.
02207 
02208    You should have received a copy of the GNU Lesser General Public
02209    License along with this library; if not, write to the Free Software
02210    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02211 */
02212 
02213 /* function declarations for functions common to all small square matrix
02214  * types */
02215 
02216 
02217 
02218 /* documentation for macros defined in individual header files */
02219 
02232 Gan_SquMatrix33_f *gan_symmat33f_ident_q ( Gan_SquMatrix33_f *A );
02233 
02284 Gan_SquMatrix33_f *gan_symmat33f_invert_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02285 
02294 Gan_SquMatrix33_f *gan_symmat33f_invert_i ( Gan_SquMatrix33_f *A );
02295 
02310 float gan_symmat33f_det_q ( Gan_SquMatrix33_f *A );
02311 
02317 float gan_symmat33f_trace_q ( Gan_SquMatrix33_f *A );
02318 
02324 #undef GAN_SQUMAT_IDENT_Q
02325 #undef GAN_SQUMAT_IDENT_S
02326 #undef GAN_SQUMAT_TPOSE_Q
02327 #undef GAN_SQUMAT_TPOSE_S
02328 #undef GAN_SQUMAT_TPOSE_I
02329 #undef GAN_MAT_SADDT_Q
02330 #undef GAN_MAT_SADDT_S
02331 #undef GAN_SQUMATI_MULTV_Q
02332 #undef GAN_SQUMATI_MULTV_S
02333 #undef GAN_SQUMATI_MULTV_I
02334 #undef GAN_SQUMATIT_MULTV_Q
02335 #undef GAN_SQUMATIT_MULTV_S
02336 #undef GAN_SQUMATIT_MULTV_I
02337 #undef GAN_SQUMAT_INVERT
02338 #undef GAN_SQUMAT_INVERT_Q
02339 #undef GAN_SQUMAT_INVERT_S
02340 #undef GAN_SQUMAT_INVERT_I
02341 #undef GAN_SQUMAT_ADJOINT_Q
02342 #undef GAN_SQUMAT_ADJOINT_S
02343 #undef GAN_SQUMAT_ADJOINTT_Q
02344 #undef GAN_SQUMAT_ADJOINTT_S
02345 #undef GAN_SQUMAT_DET_Q
02346 #undef GAN_SQUMAT_DET_S
02347 #undef GAN_SQUMAT_TRACE_Q
02348 #undef GAN_SQUMAT_TRACE_S
02349 
02362 /* This library is free software; you can redistribute it and/or
02363    modify it under the terms of the GNU Lesser General Public
02364    License as published by the Free Software Foundation; either
02365    version 2.1 of the License, or (at your option) any later version.
02366 
02367    This library is distributed in the hope that it will be useful,
02368    but WITHOUT ANY WARRANTY; without even the implied warranty of
02369    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02370    Lesser General Public License for more details.
02371 
02372    You should have received a copy of the GNU Lesser General Public
02373    License along with this library; if not, write to the Free Software
02374    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02375 */
02376 
02377 /* function declarations for functions common to all small vector types */
02378 
02379 
02380 
02381 /* documentation for macros defined in individual header files */
02382 
02393 Gan_SquMatrix33_f *gan_symmat33f_zero_q ( Gan_SquMatrix33_f *A );
02394 
02411 Gan_SquMatrix33_f *gan_symmat33f_copy_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02412 
02430 Gan_SquMatrix33_f *gan_symmat33f_scale_q ( Gan_SquMatrix33_f *A, float a,
02431                                Gan_SquMatrix33_f *B );
02432 
02440 Gan_SquMatrix33_f *gan_symmat33f_scale_i ( Gan_SquMatrix33_f *A, float a );
02441 
02450 Gan_SquMatrix33_f *gan_symmat33f_divide_q ( Gan_SquMatrix33_f *A, float a,
02451                                 Gan_SquMatrix33_f *B );
02452 
02460 Gan_SquMatrix33_f *gan_symmat33f_divide_i ( Gan_SquMatrix33_f *A, float a );
02461 
02469 Gan_SquMatrix33_f *gan_symmat33f_negate_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02470 
02478 Gan_SquMatrix33_f *gan_symmat33f_negate_i ( Gan_SquMatrix33_f *A );
02479 
02487 Gan_SquMatrix33_f *gan_symmat33f_unit_i ( Gan_SquMatrix33_f *A );
02488 
02506 Gan_SquMatrix33_f *gan_symmat33f_add_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
02507 
02516 Gan_SquMatrix33_f *gan_symmat33f_add_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02517 
02526 Gan_SquMatrix33_f *gan_symmat33f_add_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02527 
02536 Gan_SquMatrix33_f *gan_symmat33f_increment ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02537 
02555 Gan_SquMatrix33_f *gan_symmat33f_sub_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
02556 
02565 Gan_SquMatrix33_f *gan_symmat33f_sub_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02566 
02575 Gan_SquMatrix33_f *gan_symmat33f_sub_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02576 
02585 Gan_SquMatrix33_f *gan_symmat33f_decrement ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02586 
02605 Gan_Vector3_f *gan_symmat33f_multv3_q ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
02606                                 Gan_Vector3_f *q );
02607 
02608 
02609 
02610 
02682 float gan_symmat33f_sumsqr_q ( Gan_SquMatrix33_f *A );
02683 
02690 float gan_symmat33f_Fnorm_q ( Gan_SquMatrix33_f *A );
02691 
02722 /* This library is free software; you can redistribute it and/or
02723    modify it under the terms of the GNU Lesser General Public
02724    License as published by the Free Software Foundation; either
02725    version 2.1 of the License, or (at your option) any later version.
02726 
02727    This library is distributed in the hope that it will be useful,
02728    but WITHOUT ANY WARRANTY; without even the implied warranty of
02729    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02730    Lesser General Public License for more details.
02731 
02732    You should have received a copy of the GNU Lesser General Public
02733    License along with this library; if not, write to the Free Software
02734    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02735 */
02736 
02737 #undef GAN_MATTYPE
02738 #undef GAN_MATRIX_TYPE
02739 #undef GAN_SQUMATRIX_TYPE
02740 #undef GAN_VECTOR_TYPE
02741 #undef GAN_MAT_ELEMENT_TYPE
02742 #undef GAN_REALTYPE
02743 #undef GAN_VECTYPE1
02744 #undef GAN_VECTYPE2
02745 #undef GAN_MATTYPEL
02746 #undef GAN_MATTYPER
02747 #undef GAN_SQUMATTYPEL
02748 #undef GAN_SQUMATTYPER
02749 #undef GAN_FIXED_MATRIX_TYPE
02750 #undef GAN_MAT_FPRINT
02751 #undef GAN_MAT_PRINT
02752 #undef GAN_MAT_FSCANF
02753 #undef GAN_MAT_FWRITE
02754 #undef GAN_MAT_FREAD
02755 #undef GAN_MAT_ZERO_Q
02756 #undef GAN_MAT_ZERO_S
02757 #undef GAN_MAT_COPY_Q
02758 #undef GAN_MAT_COPY_S
02759 #undef GAN_MAT_SCALE_Q
02760 #undef GAN_MAT_SCALE_S
02761 #undef GAN_MAT_SCALE_I
02762 #undef GAN_MAT_DIVIDE_Q
02763 #undef GAN_MAT_DIVIDE_S
02764 #undef GAN_MAT_DIVIDE_I
02765 #undef GAN_MAT_NEGATE_Q
02766 #undef GAN_MAT_NEGATE_S
02767 #undef GAN_MAT_NEGATE_I
02768 #undef GAN_MAT_UNIT_Q
02769 #undef GAN_MAT_UNIT_S
02770 #undef GAN_MAT_UNIT_I
02771 #undef GAN_MAT_ADD_Q
02772 #undef GAN_MAT_ADD_I1
02773 #undef GAN_MAT_ADD_I2
02774 #undef GAN_MAT_INCREMENT
02775 #undef GAN_MAT_ADD_S
02776 #undef GAN_MAT_SUB_Q
02777 #undef GAN_MAT_SUB_I1
02778 #undef GAN_MAT_SUB_I2
02779 #undef GAN_MAT_DECREMENT
02780 #undef GAN_MAT_SUB_S
02781 #undef GAN_VEC_OUTER_Q
02782 #undef GAN_VEC_OUTER_S
02783 #undef GAN_MAT_MULTV_Q
02784 #undef GAN_MAT_MULTV_S
02785 #undef GAN_MAT_MULTV_I
02786 #undef GAN_MATT_MULTV_Q
02787 #undef GAN_MATT_MULTV_S
02788 #undef GAN_MATT_MULTV_I
02789 #undef GAN_MAT_LMULTM_Q
02790 #undef GAN_MAT_LMULTM_S
02791 #undef GAN_MAT_LMULTMT_Q
02792 #undef GAN_MAT_LMULTMT_S
02793 #undef GAN_MAT_RMULTM_Q
02794 #undef GAN_MAT_RMULTM_S
02795 #undef GAN_MAT_RMULTMT_Q
02796 #undef GAN_MAT_RMULTMT_S
02797 #undef GAN_MAT_LMULTMT_SYM_Q
02798 #undef GAN_MAT_LMULTMT_SYM_S
02799 #undef GAN_MAT_RMULTMT_SYM_Q
02800 #undef GAN_MAT_RMULTMT_SYM_S
02801 #undef GAN_MAT_LMULTS_Q
02802 #undef GAN_MAT_LMULTS_S
02803 #undef GAN_MAT_RMULTS_Q
02804 #undef GAN_MAT_RMULTS_S
02805 #undef GAN_SYMMATL_LRMULT_Q
02806 #undef GAN_SYMMATL_LRMULT_S
02807 #undef GAN_SYMMATR_LRMULT_Q
02808 #undef GAN_SYMMATR_LRMULT_S
02809 #undef GAN_MAT_LMULTL_Q
02810 #undef GAN_MAT_LMULTL_S
02811 #undef GAN_MAT_LMULTL_I
02812 #undef GAN_MAT_LMULTLI_Q
02813 #undef GAN_MAT_LMULTLI_S
02814 #undef GAN_MAT_LMULTLI_I
02815 #undef GAN_MAT_LMULTLT_Q
02816 #undef GAN_MAT_LMULTLT_S
02817 #undef GAN_MAT_LMULTLT_I
02818 #undef GAN_MAT_LMULTLIT_Q
02819 #undef GAN_MAT_LMULTLIT_S
02820 #undef GAN_MAT_LMULTLIT_I
02821 #undef GAN_MAT_RMULTL_Q
02822 #undef GAN_MAT_RMULTL_S
02823 #undef GAN_MAT_RMULTL_I
02824 #undef GAN_MAT_RMULTLI_Q
02825 #undef GAN_MAT_RMULTLI_S
02826 #undef GAN_MAT_RMULTLI_I
02827 #undef GAN_MAT_RMULTLT_Q
02828 #undef GAN_MAT_RMULTLT_S
02829 #undef GAN_MAT_RMULTLT_I
02830 #undef GAN_MAT_RMULTLIT_Q
02831 #undef GAN_MAT_RMULTLIT_S
02832 #undef GAN_MAT_RMULTLIT_I
02833 #undef GAN_MAT_SRMULTT_Q
02834 #undef GAN_MAT_SRMULTT_S
02835 #undef GAN_MAT_SRMULTT_I
02836 #undef GAN_MAT_SLMULTT_Q
02837 #undef GAN_MAT_SLMULTT_S
02838 #undef GAN_MAT_SLMULTT_I
02839 #undef GAN_MAT_RMULTLIT_S
02840 #undef GAN_MAT_SUMSQR_Q
02841 #undef GAN_MAT_SUMSQR_S
02842 #undef GAN_MAT_FNORM_Q
02843 #undef GAN_MAT_FNORM_S
02844 #undef GAN_MAT_FROM_MAT_Q
02845 #undef GAN_MAT_FROM_MAT_S
02846 #undef GAN_MAT_FROM_SQUMAT_Q
02847 #undef GAN_MAT_FROM_SQUMAT_S
02848 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02849 #undef GAN_SQUMAT_FROM_SQUMAT_S
02850 
02851 /* declare functions specific to lower triangular 3x3 matrices */
02865 /* This library is free software; you can redistribute it and/or
02866    modify it under the terms of the GNU Lesser General Public
02867    License as published by the Free Software Foundation; either
02868    version 2.1 of the License, or (at your option) any later version.
02869 
02870    This library is distributed in the hope that it will be useful,
02871    but WITHOUT ANY WARRANTY; without even the implied warranty of
02872    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02873    Lesser General Public License for more details.
02874 
02875    You should have received a copy of the GNU Lesser General Public
02876    License along with this library; if not, write to the Free Software
02877    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02878 */
02879 
02880 #ifndef _GAN_3X3LTMATF_H
02881 
02897 Gan_SquMatrix33_f *gan_ltmat33f_fill_q ( Gan_SquMatrix33_f *A,
02898                                          float XX,
02899                                          float YX, float YY,
02900                                          float ZX, float ZY, float ZZ );
02901 
02921 void gan_ltmat33f_get_parts_q ( Gan_SquMatrix33_f *A,
02922                                 Gan_SquMatrix22_f *B, Gan_Vector2_f *p,
02923                                 float *s );
02924 
02947 Gan_SquMatrix33_f * gan_ltmat33f_set_parts_q ( Gan_SquMatrix33_f *A,
02948                                                Gan_SquMatrix22_f *B,
02949                                                Gan_Vector2_f *p, float s );
02950 
02956 #endif /* #ifndef _GAN_3X3LTMATF_H */
02957 
02958 #define GAN_MATTYPE Gan_SquMatrix33_f
02959 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02960 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02961 #define GAN_VECTOR_TYPE Gan_Vector_f
02962 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02963 #define GAN_REALTYPE float
02964 #define GAN_VECTYPE1 Gan_Vector3_f
02965 #define GAN_VECTYPE2 Gan_Vector3_f
02966 #define GAN_SQUMATTYPEL Gan_SquMatrix33_f
02967 #define GAN_SQUMATTYPER Gan_SquMatrix33_f
02968 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33_F
02969 #define GAN_MAT_FPRINT     gan_ltmat33f_fprint
02970 #define GAN_MAT_PRINT      gan_ltmat33f_print
02971 #define GAN_MAT_FSCANF     gan_ltmat33f_fscanf
02972 #define GAN_MAT_FWRITE     gan_ltmat33f_fwrite
02973 #define GAN_MAT_FREAD      gan_ltmat33f_fread
02974 #define GAN_MAT_ZERO_Q     gan_ltmat33f_zero_q
02975 #define GAN_MAT_ZERO_S     gan_ltmat33f_zero_s
02976 #define GAN_MAT_COPY_Q     gan_ltmat33f_copy_q
02977 #define GAN_MAT_COPY_S     gan_ltmat33f_copy_s
02978 #define GAN_MAT_SCALE_Q    gan_ltmat33f_scale_q
02979 #define GAN_MAT_SCALE_S    gan_ltmat33f_scale_s
02980 #define GAN_MAT_SCALE_I    gan_ltmat33f_scale_i
02981 #define GAN_MAT_DIVIDE_Q   gan_ltmat33f_divide_q
02982 #define GAN_MAT_DIVIDE_S   gan_ltmat33f_divide_s
02983 #define GAN_MAT_DIVIDE_I   gan_ltmat33f_divide_i
02984 #define GAN_MAT_NEGATE_Q   gan_ltmat33f_negate_q
02985 #define GAN_MAT_NEGATE_S   gan_ltmat33f_negate_s
02986 #define GAN_MAT_NEGATE_I   gan_ltmat33f_negate_i
02987 #define GAN_MAT_UNIT_Q     gan_ltmat33f_unit_q
02988 #define GAN_MAT_UNIT_S     gan_ltmat33f_unit_s
02989 #define GAN_MAT_UNIT_I     gan_ltmat33f_unit_i
02990 #define GAN_MAT_ADD_Q      gan_ltmat33f_add_q
02991 #define GAN_MAT_ADD_I1     gan_ltmat33f_add_i1
02992 #define GAN_MAT_ADD_I2     gan_ltmat33f_add_i2
02993 #define GAN_MAT_INCREMENT  gan_ltmat33f_increment
02994 #define GAN_MAT_ADD_S      gan_ltmat33f_add_s
02995 #define GAN_MAT_SUB_Q      gan_ltmat33f_sub_q
02996 #define GAN_MAT_SUB_I1     gan_ltmat33f_sub_i1
02997 #define GAN_MAT_SUB_I2     gan_ltmat33f_sub_i2
02998 #define GAN_MAT_DECREMENT  gan_ltmat33f_decrement
02999 #define GAN_MAT_SUB_S      gan_ltmat33f_sub_s
03000 #define GAN_MAT_MULTV_Q    gan_ltmat33f_multv3_q
03001 #define GAN_MAT_MULTV_S    gan_ltmat33f_multv3_s
03002 #define GAN_MAT_MULTV_I    gan_ltmat33f_multv3_i
03003 #define GAN_MATT_MULTV_Q   gan_ltmat33Tf_multv3_q
03004 #define GAN_MATT_MULTV_S   gan_ltmat33Tf_multv3_s
03005 #define GAN_MATT_MULTV_I   gan_ltmat33Tf_multv3_i
03006 #define GAN_MAT_SRMULTT_Q  gan_ltmat33f_srmultT_q
03007 #define GAN_MAT_SRMULTT_S  gan_ltmat33f_srmultT_s
03008 #define GAN_MAT_SRMULTT_I  gan_ltmat33f_srmultT_i
03009 #define GAN_MAT_SLMULTT_Q  gan_ltmat33f_slmultT_q
03010 #define GAN_MAT_SLMULTT_S  gan_ltmat33f_slmultT_s
03011 #define GAN_MAT_SLMULTT_I  gan_ltmat33f_slmultT_i
03012 #define GAN_MAT_SUMSQR_Q   gan_ltmat33f_sumsqr_q
03013 #define GAN_MAT_SUMSQR_S   gan_ltmat33f_sumsqr_s
03014 #define GAN_MAT_FNORM_Q    gan_ltmat33f_Fnorm_q
03015 #define GAN_MAT_FNORM_S    gan_ltmat33f_Fnorm_s
03016 
03017 #define GAN_SQUMAT_IDENT_Q    gan_ltmat33f_ident_q
03018 #define GAN_SQUMAT_IDENT_S    gan_ltmat33f_ident_s
03019 #define GAN_SQUMATI_MULTV_Q   gan_ltmat33If_multv3_q
03020 #define GAN_SQUMATI_MULTV_S   gan_ltmat33If_multv3_s
03021 #define GAN_SQUMATI_MULTV_I   gan_ltmat33If_multv3_i
03022 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat33ITf_multv3_q
03023 #define GAN_SQUMATIT_MULTV_S  gan_ltmat33ITf_multv3_s
03024 #define GAN_SQUMATIT_MULTV_I  gan_ltmat33ITf_multv3_i
03025 #define GAN_SQUMAT_INVERT     gan_ltmat33f_invert
03026 #define GAN_SQUMAT_INVERT_Q   gan_ltmat33f_invert_q
03027 #define GAN_SQUMAT_INVERT_S   gan_ltmat33f_invert_s
03028 #define GAN_SQUMAT_INVERT_I   gan_ltmat33f_invert_i
03029 #define GAN_SQUMAT_DET_Q      gan_ltmat33f_det_q
03030 #define GAN_SQUMAT_DET_S      gan_ltmat33f_det_s
03031 #define GAN_SQUMAT_TRACE_Q    gan_ltmat33f_trace_q
03032 #define GAN_SQUMAT_TRACE_S    gan_ltmat33f_trace_s
03033 
03034 #ifndef _GAN_3X3LTMATF_H
03035 #define _GAN_3X3LTMATF_H
03036 
03037 
03038 #endif /* #ifndef _GAN_3X3LTMATF_H */
03039 
03052 /* This library is free software; you can redistribute it and/or
03053    modify it under the terms of the GNU Lesser General Public
03054    License as published by the Free Software Foundation; either
03055    version 2.1 of the License, or (at your option) any later version.
03056 
03057    This library is distributed in the hope that it will be useful,
03058    but WITHOUT ANY WARRANTY; without even the implied warranty of
03059    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03060    Lesser General Public License for more details.
03061 
03062    You should have received a copy of the GNU Lesser General Public
03063    License along with this library; if not, write to the Free Software
03064    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03065 */
03066 
03067 /* function declarations for functions common to all small square matrix
03068  * types */
03069 
03070 
03071 
03072 /* documentation for macros defined in individual header files */
03073 
03086 Gan_SquMatrix33_f *gan_ltmat33f_ident_q ( Gan_SquMatrix33_f *A );
03087 
03125 Gan_Vector3_f *gan_ltmat33If_multv3_q ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03126                                     Gan_Vector3_f *q );
03127 
03136 Gan_Vector3_f *gan_ltmat33If_multv3_i ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03137 
03146 Gan_Vector3_f *gan_ltmat33ITf_multv3_q ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03147                                      Gan_Vector3_f *q );
03148 
03157 Gan_Vector3_f *gan_ltmat33ITf_multv3_i ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03158 
03176 Gan_SquMatrix33_f *gan_ltmat33f_invert_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03177 
03186 Gan_SquMatrix33_f *gan_ltmat33f_invert_i ( Gan_SquMatrix33_f *A );
03187 
03202 float gan_ltmat33f_det_q ( Gan_SquMatrix33_f *A );
03203 
03209 float gan_ltmat33f_trace_q ( Gan_SquMatrix33_f *A );
03210 
03216 #undef GAN_SQUMAT_IDENT_Q
03217 #undef GAN_SQUMAT_IDENT_S
03218 #undef GAN_SQUMAT_TPOSE_Q
03219 #undef GAN_SQUMAT_TPOSE_S
03220 #undef GAN_SQUMAT_TPOSE_I
03221 #undef GAN_MAT_SADDT_Q
03222 #undef GAN_MAT_SADDT_S
03223 #undef GAN_SQUMATI_MULTV_Q
03224 #undef GAN_SQUMATI_MULTV_S
03225 #undef GAN_SQUMATI_MULTV_I
03226 #undef GAN_SQUMATIT_MULTV_Q
03227 #undef GAN_SQUMATIT_MULTV_S
03228 #undef GAN_SQUMATIT_MULTV_I
03229 #undef GAN_SQUMAT_INVERT
03230 #undef GAN_SQUMAT_INVERT_Q
03231 #undef GAN_SQUMAT_INVERT_S
03232 #undef GAN_SQUMAT_INVERT_I
03233 #undef GAN_SQUMAT_ADJOINT_Q
03234 #undef GAN_SQUMAT_ADJOINT_S
03235 #undef GAN_SQUMAT_ADJOINTT_Q
03236 #undef GAN_SQUMAT_ADJOINTT_S
03237 #undef GAN_SQUMAT_DET_Q
03238 #undef GAN_SQUMAT_DET_S
03239 #undef GAN_SQUMAT_TRACE_Q
03240 #undef GAN_SQUMAT_TRACE_S
03241 
03254 /* This library is free software; you can redistribute it and/or
03255    modify it under the terms of the GNU Lesser General Public
03256    License as published by the Free Software Foundation; either
03257    version 2.1 of the License, or (at your option) any later version.
03258 
03259    This library is distributed in the hope that it will be useful,
03260    but WITHOUT ANY WARRANTY; without even the implied warranty of
03261    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03262    Lesser General Public License for more details.
03263 
03264    You should have received a copy of the GNU Lesser General Public
03265    License along with this library; if not, write to the Free Software
03266    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03267 */
03268 
03269 /* function declarations for functions common to all small vector types */
03270 
03271 
03272 
03273 /* documentation for macros defined in individual header files */
03274 
03285 Gan_SquMatrix33_f *gan_ltmat33f_zero_q ( Gan_SquMatrix33_f *A );
03286 
03303 Gan_SquMatrix33_f *gan_ltmat33f_copy_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03304 
03322 Gan_SquMatrix33_f *gan_ltmat33f_scale_q ( Gan_SquMatrix33_f *A, float a,
03323                                Gan_SquMatrix33_f *B );
03324 
03332 Gan_SquMatrix33_f *gan_ltmat33f_scale_i ( Gan_SquMatrix33_f *A, float a );
03333 
03342 Gan_SquMatrix33_f *gan_ltmat33f_divide_q ( Gan_SquMatrix33_f *A, float a,
03343                                 Gan_SquMatrix33_f *B );
03344 
03352 Gan_SquMatrix33_f *gan_ltmat33f_divide_i ( Gan_SquMatrix33_f *A, float a );
03353 
03361 Gan_SquMatrix33_f *gan_ltmat33f_negate_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03362 
03370 Gan_SquMatrix33_f *gan_ltmat33f_negate_i ( Gan_SquMatrix33_f *A );
03371 
03379 Gan_SquMatrix33_f *gan_ltmat33f_unit_i ( Gan_SquMatrix33_f *A );
03380 
03398 Gan_SquMatrix33_f *gan_ltmat33f_add_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
03399 
03408 Gan_SquMatrix33_f *gan_ltmat33f_add_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03409 
03418 Gan_SquMatrix33_f *gan_ltmat33f_add_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03419 
03428 Gan_SquMatrix33_f *gan_ltmat33f_increment ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03429 
03447 Gan_SquMatrix33_f *gan_ltmat33f_sub_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
03448 
03457 Gan_SquMatrix33_f *gan_ltmat33f_sub_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03458 
03467 Gan_SquMatrix33_f *gan_ltmat33f_sub_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03468 
03477 Gan_SquMatrix33_f *gan_ltmat33f_decrement ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03478 
03497 Gan_Vector3_f *gan_ltmat33f_multv3_q ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03498                                 Gan_Vector3_f *q );
03499 
03508 Gan_Vector3_f *gan_ltmat33f_multv3_i ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03509 
03518 Gan_Vector3_f *gan_ltmat33Tf_multv3_q ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03519                                  Gan_Vector3_f *q );
03520 
03529 Gan_Vector3_f *gan_ltmat33Tf_multv3_i ( Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03530 
03592 Gan_SquMatrix33_f *gan_ltmat33f_slmultT_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03593 
03603 Gan_SquMatrix33_f *gan_ltmat33f_slmultT_i ( Gan_SquMatrix33_f *A );
03604 
03613 Gan_SquMatrix33_f *gan_ltmat33f_srmultT_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03614 
03624 Gan_SquMatrix33_f *gan_ltmat33f_srmultT_i ( Gan_SquMatrix33_f *A );
03625 
03640 float gan_ltmat33f_sumsqr_q ( Gan_SquMatrix33_f *A );
03641 
03648 float gan_ltmat33f_Fnorm_q ( Gan_SquMatrix33_f *A );
03649 
03680 /* This library is free software; you can redistribute it and/or
03681    modify it under the terms of the GNU Lesser General Public
03682    License as published by the Free Software Foundation; either
03683    version 2.1 of the License, or (at your option) any later version.
03684 
03685    This library is distributed in the hope that it will be useful,
03686    but WITHOUT ANY WARRANTY; without even the implied warranty of
03687    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03688    Lesser General Public License for more details.
03689 
03690    You should have received a copy of the GNU Lesser General Public
03691    License along with this library; if not, write to the Free Software
03692    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03693 */
03694 
03695 #undef GAN_MATTYPE
03696 #undef GAN_MATRIX_TYPE
03697 #undef GAN_SQUMATRIX_TYPE
03698 #undef GAN_VECTOR_TYPE
03699 #undef GAN_MAT_ELEMENT_TYPE
03700 #undef GAN_REALTYPE
03701 #undef GAN_VECTYPE1
03702 #undef GAN_VECTYPE2
03703 #undef GAN_MATTYPEL
03704 #undef GAN_MATTYPER
03705 #undef GAN_SQUMATTYPEL
03706 #undef GAN_SQUMATTYPER
03707 #undef GAN_FIXED_MATRIX_TYPE
03708 #undef GAN_MAT_FPRINT
03709 #undef GAN_MAT_PRINT
03710 #undef GAN_MAT_FSCANF
03711 #undef GAN_MAT_FWRITE
03712 #undef GAN_MAT_FREAD
03713 #undef GAN_MAT_ZERO_Q
03714 #undef GAN_MAT_ZERO_S
03715 #undef GAN_MAT_COPY_Q
03716 #undef GAN_MAT_COPY_S
03717 #undef GAN_MAT_SCALE_Q
03718 #undef GAN_MAT_SCALE_S
03719 #undef GAN_MAT_SCALE_I
03720 #undef GAN_MAT_DIVIDE_Q
03721 #undef GAN_MAT_DIVIDE_S
03722 #undef GAN_MAT_DIVIDE_I
03723 #undef GAN_MAT_NEGATE_Q
03724 #undef GAN_MAT_NEGATE_S
03725 #undef GAN_MAT_NEGATE_I
03726 #undef GAN_MAT_UNIT_Q
03727 #undef GAN_MAT_UNIT_S
03728 #undef GAN_MAT_UNIT_I
03729 #undef GAN_MAT_ADD_Q
03730 #undef GAN_MAT_ADD_I1
03731 #undef GAN_MAT_ADD_I2
03732 #undef GAN_MAT_INCREMENT
03733 #undef GAN_MAT_ADD_S
03734 #undef GAN_MAT_SUB_Q
03735 #undef GAN_MAT_SUB_I1
03736 #undef GAN_MAT_SUB_I2
03737 #undef GAN_MAT_DECREMENT
03738 #undef GAN_MAT_SUB_S
03739 #undef GAN_VEC_OUTER_Q
03740 #undef GAN_VEC_OUTER_S
03741 #undef GAN_MAT_MULTV_Q
03742 #undef GAN_MAT_MULTV_S
03743 #undef GAN_MAT_MULTV_I
03744 #undef GAN_MATT_MULTV_Q
03745 #undef GAN_MATT_MULTV_S
03746 #undef GAN_MATT_MULTV_I
03747 #undef GAN_MAT_LMULTM_Q
03748 #undef GAN_MAT_LMULTM_S
03749 #undef GAN_MAT_LMULTMT_Q
03750 #undef GAN_MAT_LMULTMT_S
03751 #undef GAN_MAT_RMULTM_Q
03752 #undef GAN_MAT_RMULTM_S
03753 #undef GAN_MAT_RMULTMT_Q
03754 #undef GAN_MAT_RMULTMT_S
03755 #undef GAN_MAT_LMULTMT_SYM_Q
03756 #undef GAN_MAT_LMULTMT_SYM_S
03757 #undef GAN_MAT_RMULTMT_SYM_Q
03758 #undef GAN_MAT_RMULTMT_SYM_S
03759 #undef GAN_MAT_LMULTS_Q
03760 #undef GAN_MAT_LMULTS_S
03761 #undef GAN_MAT_RMULTS_Q
03762 #undef GAN_MAT_RMULTS_S
03763 #undef GAN_SYMMATL_LRMULT_Q
03764 #undef GAN_SYMMATL_LRMULT_S
03765 #undef GAN_SYMMATR_LRMULT_Q
03766 #undef GAN_SYMMATR_LRMULT_S
03767 #undef GAN_MAT_LMULTL_Q
03768 #undef GAN_MAT_LMULTL_S
03769 #undef GAN_MAT_LMULTL_I
03770 #undef GAN_MAT_LMULTLI_Q
03771 #undef GAN_MAT_LMULTLI_S
03772 #undef GAN_MAT_LMULTLI_I
03773 #undef GAN_MAT_LMULTLT_Q
03774 #undef GAN_MAT_LMULTLT_S
03775 #undef GAN_MAT_LMULTLT_I
03776 #undef GAN_MAT_LMULTLIT_Q
03777 #undef GAN_MAT_LMULTLIT_S
03778 #undef GAN_MAT_LMULTLIT_I
03779 #undef GAN_MAT_RMULTL_Q
03780 #undef GAN_MAT_RMULTL_S
03781 #undef GAN_MAT_RMULTL_I
03782 #undef GAN_MAT_RMULTLI_Q
03783 #undef GAN_MAT_RMULTLI_S
03784 #undef GAN_MAT_RMULTLI_I
03785 #undef GAN_MAT_RMULTLT_Q
03786 #undef GAN_MAT_RMULTLT_S
03787 #undef GAN_MAT_RMULTLT_I
03788 #undef GAN_MAT_RMULTLIT_Q
03789 #undef GAN_MAT_RMULTLIT_S
03790 #undef GAN_MAT_RMULTLIT_I
03791 #undef GAN_MAT_SRMULTT_Q
03792 #undef GAN_MAT_SRMULTT_S
03793 #undef GAN_MAT_SRMULTT_I
03794 #undef GAN_MAT_SLMULTT_Q
03795 #undef GAN_MAT_SLMULTT_S
03796 #undef GAN_MAT_SLMULTT_I
03797 #undef GAN_MAT_RMULTLIT_S
03798 #undef GAN_MAT_SUMSQR_Q
03799 #undef GAN_MAT_SUMSQR_S
03800 #undef GAN_MAT_FNORM_Q
03801 #undef GAN_MAT_FNORM_S
03802 #undef GAN_MAT_FROM_MAT_Q
03803 #undef GAN_MAT_FROM_MAT_S
03804 #undef GAN_MAT_FROM_SQUMAT_Q
03805 #undef GAN_MAT_FROM_SQUMAT_S
03806 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03807 #undef GAN_SQUMAT_FROM_SQUMAT_S
03808 
03809 /* declare functions specific to upper triangular 3x3 matrices */
03823 #define GAN_MATTYPE Gan_SquMatrix33_f
03824 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03825 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03826 #define GAN_VECTOR_TYPE Gan_Vector_f
03827 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03828 #define GAN_REALTYPE float
03829 #define GAN_MAT_FPRINT   gan_ltmat33Tf_fprint
03830 #define GAN_MAT_PRINT    gan_ltmat33Tf_print
03831 #define GAN_MAT_FSCANF   gan_ltmat33Tf_fscanf
03832 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33_F
03833 
03834 #define gan_ltmat33Tf_fwrite gan_ltmat33f_fwrite
03835 #define gan_ltmat33Tf_fread  gan_ltmat33f_fread
03836 
03849 /* This library is free software; you can redistribute it and/or
03850    modify it under the terms of the GNU Lesser General Public
03851    License as published by the Free Software Foundation; either
03852    version 2.1 of the License, or (at your option) any later version.
03853 
03854    This library is distributed in the hope that it will be useful,
03855    but WITHOUT ANY WARRANTY; without even the implied warranty of
03856    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03857    Lesser General Public License for more details.
03858 
03859    You should have received a copy of the GNU Lesser General Public
03860    License along with this library; if not, write to the Free Software
03861    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03862 */
03863 
03864 /* function declarations for functions common to all small square matrix
03865  * types */
03866 
03867 
03868 
03869 /* documentation for macros defined in individual header files */
03870 
03937 #undef GAN_SQUMAT_IDENT_Q
03938 #undef GAN_SQUMAT_IDENT_S
03939 #undef GAN_SQUMAT_TPOSE_Q
03940 #undef GAN_SQUMAT_TPOSE_S
03941 #undef GAN_SQUMAT_TPOSE_I
03942 #undef GAN_MAT_SADDT_Q
03943 #undef GAN_MAT_SADDT_S
03944 #undef GAN_SQUMATI_MULTV_Q
03945 #undef GAN_SQUMATI_MULTV_S
03946 #undef GAN_SQUMATI_MULTV_I
03947 #undef GAN_SQUMATIT_MULTV_Q
03948 #undef GAN_SQUMATIT_MULTV_S
03949 #undef GAN_SQUMATIT_MULTV_I
03950 #undef GAN_SQUMAT_INVERT
03951 #undef GAN_SQUMAT_INVERT_Q
03952 #undef GAN_SQUMAT_INVERT_S
03953 #undef GAN_SQUMAT_INVERT_I
03954 #undef GAN_SQUMAT_ADJOINT_Q
03955 #undef GAN_SQUMAT_ADJOINT_S
03956 #undef GAN_SQUMAT_ADJOINTT_Q
03957 #undef GAN_SQUMAT_ADJOINTT_S
03958 #undef GAN_SQUMAT_DET_Q
03959 #undef GAN_SQUMAT_DET_S
03960 #undef GAN_SQUMAT_TRACE_Q
03961 #undef GAN_SQUMAT_TRACE_S
03962 
03975 /* This library is free software; you can redistribute it and/or
03976    modify it under the terms of the GNU Lesser General Public
03977    License as published by the Free Software Foundation; either
03978    version 2.1 of the License, or (at your option) any later version.
03979 
03980    This library is distributed in the hope that it will be useful,
03981    but WITHOUT ANY WARRANTY; without even the implied warranty of
03982    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03983    Lesser General Public License for more details.
03984 
03985    You should have received a copy of the GNU Lesser General Public
03986    License along with this library; if not, write to the Free Software
03987    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03988 */
03989 
03990 /* function declarations for functions common to all small vector types */
03991 
03992 
03993 
03994 /* documentation for macros defined in individual header files */
03995 
04166 /* This library is free software; you can redistribute it and/or
04167    modify it under the terms of the GNU Lesser General Public
04168    License as published by the Free Software Foundation; either
04169    version 2.1 of the License, or (at your option) any later version.
04170 
04171    This library is distributed in the hope that it will be useful,
04172    but WITHOUT ANY WARRANTY; without even the implied warranty of
04173    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04174    Lesser General Public License for more details.
04175 
04176    You should have received a copy of the GNU Lesser General Public
04177    License along with this library; if not, write to the Free Software
04178    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04179 */
04180 
04181 #undef GAN_MATTYPE
04182 #undef GAN_MATRIX_TYPE
04183 #undef GAN_SQUMATRIX_TYPE
04184 #undef GAN_VECTOR_TYPE
04185 #undef GAN_MAT_ELEMENT_TYPE
04186 #undef GAN_REALTYPE
04187 #undef GAN_VECTYPE1
04188 #undef GAN_VECTYPE2
04189 #undef GAN_MATTYPEL
04190 #undef GAN_MATTYPER
04191 #undef GAN_SQUMATTYPEL
04192 #undef GAN_SQUMATTYPER
04193 #undef GAN_FIXED_MATRIX_TYPE
04194 #undef GAN_MAT_FPRINT
04195 #undef GAN_MAT_PRINT
04196 #undef GAN_MAT_FSCANF
04197 #undef GAN_MAT_FWRITE
04198 #undef GAN_MAT_FREAD
04199 #undef GAN_MAT_ZERO_Q
04200 #undef GAN_MAT_ZERO_S
04201 #undef GAN_MAT_COPY_Q
04202 #undef GAN_MAT_COPY_S
04203 #undef GAN_MAT_SCALE_Q
04204 #undef GAN_MAT_SCALE_S
04205 #undef GAN_MAT_SCALE_I
04206 #undef GAN_MAT_DIVIDE_Q
04207 #undef GAN_MAT_DIVIDE_S
04208 #undef GAN_MAT_DIVIDE_I
04209 #undef GAN_MAT_NEGATE_Q
04210 #undef GAN_MAT_NEGATE_S
04211 #undef GAN_MAT_NEGATE_I
04212 #undef GAN_MAT_UNIT_Q
04213 #undef GAN_MAT_UNIT_S
04214 #undef GAN_MAT_UNIT_I
04215 #undef GAN_MAT_ADD_Q
04216 #undef GAN_MAT_ADD_I1
04217 #undef GAN_MAT_ADD_I2
04218 #undef GAN_MAT_INCREMENT
04219 #undef GAN_MAT_ADD_S
04220 #undef GAN_MAT_SUB_Q
04221 #undef GAN_MAT_SUB_I1
04222 #undef GAN_MAT_SUB_I2
04223 #undef GAN_MAT_DECREMENT
04224 #undef GAN_MAT_SUB_S
04225 #undef GAN_VEC_OUTER_Q
04226 #undef GAN_VEC_OUTER_S
04227 #undef GAN_MAT_MULTV_Q
04228 #undef GAN_MAT_MULTV_S
04229 #undef GAN_MAT_MULTV_I
04230 #undef GAN_MATT_MULTV_Q
04231 #undef GAN_MATT_MULTV_S
04232 #undef GAN_MATT_MULTV_I
04233 #undef GAN_MAT_LMULTM_Q
04234 #undef GAN_MAT_LMULTM_S
04235 #undef GAN_MAT_LMULTMT_Q
04236 #undef GAN_MAT_LMULTMT_S
04237 #undef GAN_MAT_RMULTM_Q
04238 #undef GAN_MAT_RMULTM_S
04239 #undef GAN_MAT_RMULTMT_Q
04240 #undef GAN_MAT_RMULTMT_S
04241 #undef GAN_MAT_LMULTMT_SYM_Q
04242 #undef GAN_MAT_LMULTMT_SYM_S
04243 #undef GAN_MAT_RMULTMT_SYM_Q
04244 #undef GAN_MAT_RMULTMT_SYM_S
04245 #undef GAN_MAT_LMULTS_Q
04246 #undef GAN_MAT_LMULTS_S
04247 #undef GAN_MAT_RMULTS_Q
04248 #undef GAN_MAT_RMULTS_S
04249 #undef GAN_SYMMATL_LRMULT_Q
04250 #undef GAN_SYMMATL_LRMULT_S
04251 #undef GAN_SYMMATR_LRMULT_Q
04252 #undef GAN_SYMMATR_LRMULT_S
04253 #undef GAN_MAT_LMULTL_Q
04254 #undef GAN_MAT_LMULTL_S
04255 #undef GAN_MAT_LMULTL_I
04256 #undef GAN_MAT_LMULTLI_Q
04257 #undef GAN_MAT_LMULTLI_S
04258 #undef GAN_MAT_LMULTLI_I
04259 #undef GAN_MAT_LMULTLT_Q
04260 #undef GAN_MAT_LMULTLT_S
04261 #undef GAN_MAT_LMULTLT_I
04262 #undef GAN_MAT_LMULTLIT_Q
04263 #undef GAN_MAT_LMULTLIT_S
04264 #undef GAN_MAT_LMULTLIT_I
04265 #undef GAN_MAT_RMULTL_Q
04266 #undef GAN_MAT_RMULTL_S
04267 #undef GAN_MAT_RMULTL_I
04268 #undef GAN_MAT_RMULTLI_Q
04269 #undef GAN_MAT_RMULTLI_S
04270 #undef GAN_MAT_RMULTLI_I
04271 #undef GAN_MAT_RMULTLT_Q
04272 #undef GAN_MAT_RMULTLT_S
04273 #undef GAN_MAT_RMULTLT_I
04274 #undef GAN_MAT_RMULTLIT_Q
04275 #undef GAN_MAT_RMULTLIT_S
04276 #undef GAN_MAT_RMULTLIT_I
04277 #undef GAN_MAT_SRMULTT_Q
04278 #undef GAN_MAT_SRMULTT_S
04279 #undef GAN_MAT_SRMULTT_I
04280 #undef GAN_MAT_SLMULTT_Q
04281 #undef GAN_MAT_SLMULTT_S
04282 #undef GAN_MAT_SLMULTT_I
04283 #undef GAN_MAT_RMULTLIT_S
04284 #undef GAN_MAT_SUMSQR_Q
04285 #undef GAN_MAT_SUMSQR_S
04286 #undef GAN_MAT_FNORM_Q
04287 #undef GAN_MAT_FNORM_S
04288 #undef GAN_MAT_FROM_MAT_Q
04289 #undef GAN_MAT_FROM_MAT_S
04290 #undef GAN_MAT_FROM_SQUMAT_Q
04291 #undef GAN_MAT_FROM_SQUMAT_S
04292 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04293 #undef GAN_SQUMAT_FROM_SQUMAT_S
04294 
04303 #ifdef __cplusplus
04304 }
04305 #endif
04306 
04307 #endif /* #ifndef _GAN_3X3MATRIXF_H */

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