Main Page | Modules | Class List | File List | Class 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 
00452 
00453 typedef struct Gan_Matrix33_f
00454 {
00455    float xx, xy, xz,
00456          yx, yy, yz,
00457          zx, zy, zz;
00458 } Gan_Matrix33_f;
00459 
00460 #ifndef NDEBUG
00461 
00462 typedef enum { GAN_SYMMETRIC_MATRIX33_F, GAN_LOWER_TRI_MATRIX33_F }
00463  Gan_SquMatrix33Type_f;
00464 #endif /* #ifndef NDEBUG */
00465 
00467 typedef struct Gan_SquMatrix33_f
00468 {
00469 #ifndef NDEBUG
00470    /* square matrix type, for setting and checking in debug mode */
00471    Gan_SquMatrix33Type_f type;
00472 #endif /* #ifndef NDEBUG */
00473 
00474    /* matrix data */
00475    float xx,
00476          yx, yy,
00477          zx, zy, zz;
00478 } Gan_SquMatrix33_f;
00479 
00480 /* matrix definitions specific to 3x3 matrices */
00481 #define GAN_ST33F_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ)\
00482            (GAN_TEST_OP1(A,Gan_SquMatrix33_f),gan_eval((A)->type=t),\
00483             GAN_FREP33L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ)))
00484 #define GAN_ST33F_IDENT(A,t)\
00485            (GAN_TEST_OP1(A,Gan_SquMatrix33_f),gan_eval((A)->type=t),\
00486             GAN_FREP33L_A_C((A)->,=,1.0,0.0,1.0,0.0,0.0,1.0))
00487 
00488 /* generic matrix multiply operations */
00489 #define GAN_MAT33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00490  (a p1 = GAN_REP3_OP_AB(b,* c,xx,xy,xz,q1,q2,q3,+),\
00491   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,yz,q1,q2,q3,+),\
00492   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00493 #define GAN_MAT33TF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00494  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00495   a p2 = GAN_REP3_OP_AB(b,* c,xy,yy,zy,q1,q2,q3,+),\
00496   a p3 = GAN_REP3_OP_AB(b,* c,xz,yz,zz,q1,q2,q3,+))
00497 
00498 /* symmetric matrix multiply operation */
00499 #define GAN_SYM33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00500  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00501   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,zy,q1,q2,q3,+),\
00502   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00503 
00504 /* lower triangular matrix multiply operations */
00505 #define GAN_LOW33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00506  (a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00507   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00508   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00509 #define GAN_LOW33IF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00510  (a p1 =  c q1 / b xx,\
00511   a p2 = (c q2 - b yx * a p1) / b yy,\
00512   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz)
00513 
00514 /* upper triangular matrix multiply operations */
00515 #define GAN_UPP33F_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00516  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00517   a p2 = GAN_REP2_OP_AB(b,* c,yy,zy,q2,q3,+),\
00518   a p3 = GAN_REP1_OP_AB(b,* c,zz,q3,+))
00519 #define GAN_UPP33IF_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00520  (a p3 =  c q3 / b zz,\
00521   a p2 = (c q2 - b zy * a p3) / b yy,\
00522   a p1 = (c q1 - b yx * a p2 - b zx * a p3) / b xx)
00523 
00524 /* symmetric/lower triangular square matrix definitions */
00525 #define GAN_ST33F_ZERO(A,t)\
00526            (GAN_TEST_OP1(A,Gan_SquMatrix33_f), gan_eval((A)->type=t),\
00527             GAN_REP33L_AS_C((A)->,=0.0))
00528 #define GAN_ST33F_COPY(A,B,t)\
00529            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00530             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00531             GAN_REP33L_AA_C((B)->,=(A)->))
00532 #define GAN_ST33F_SCALE(A,a,B,t)\
00533            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00534             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00535             GAN_REP33L_AAS_C((B)->,=(A)->,*(a)))
00536 #define GAN_ST33F_DIVIDE(A,a,B,t)\
00537            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00538             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00539             GAN_REP33L_AAS_C((B)->,=(A)->,/(a)))
00540 #define GAN_ST33F_NEGATE(A,B,t)\
00541            (GAN_TEST_OP2(A,B,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00542             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00543             GAN_REP33L_AA_C((B)->,=-(A)->))
00544 #define GAN_ST33F_ADD(A,B,C,t)\
00545          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33_f,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00546           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00547           GAN_REP33L_AAA_C((C)->,=(A)->,+(B)->))
00548 #define GAN_ST33F_SUB(A,B,C,t)\
00549          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33_f,Gan_SquMatrix33_f,Gan_SquMatrix33_f),\
00550           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00551           GAN_REP33L_AAA_C((C)->,=(A)->,-(B)->))
00552 
00553 /* declare functions specific to generic 3x3 matrices */
00567 /* This library is free software; you can redistribute it and/or
00568    modify it under the terms of the GNU Lesser General Public
00569    License as published by the Free Software Foundation; either
00570    version 2.1 of the License, or (at your option) any later version.
00571 
00572    This library is distributed in the hope that it will be useful,
00573    but WITHOUT ANY WARRANTY; without even the implied warranty of
00574    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00575    Lesser General Public License for more details.
00576 
00577    You should have received a copy of the GNU Lesser General Public
00578    License along with this library; if not, write to the Free Software
00579    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00580 */
00581 
00582 #ifndef _GAN_3X3MATF_H
00583 
00600  Gan_Matrix33_f *gan_mat33f_fill_q ( Gan_Matrix33_f *A,
00601                                     float XX, float XY, float XZ,
00602                                     float YX, float YY, float YZ,
00603                                     float ZX, float ZY, float ZZ );
00604 
00629  Gan_Matrix33_f *gan_mat33f_cross_q ( const Gan_Vector3_f *p, Gan_Matrix33_f *A );
00630 
00652  void gan_mat33f_get_rows_q ( const Gan_Matrix33_f *A,
00653                              Gan_Vector3_f *p, Gan_Vector3_f *q,
00654                              Gan_Vector3_f *r );
00655 
00667  void gan_mat33f_get_cols_q ( const Gan_Matrix33_f *A,
00668                              Gan_Vector3_f *p, Gan_Vector3_f *q,
00669                              Gan_Vector3_f *r );
00670 
00678  Gan_Matrix22_f *gan_mat33f_get_m22tl_q ( const Gan_Matrix33_f *A,
00679                                          Gan_Matrix22_f *B );
00680 
00688  Gan_Vector2_f *gan_mat33f_get_v2tr_q ( const Gan_Matrix33_f *A, Gan_Vector2_f *p );
00689 
00703  void gan_mat33f_get_parts_q ( const Gan_Matrix33_f *A, Gan_Matrix22_f *B,
00704                               Gan_Vector2_f *p, Gan_Vector2_f *q, float *s );
00705 
00728  Gan_Matrix33_f *gan_mat33f_set_parts_q ( Gan_Matrix33_f *A, const Gan_Matrix22_f *B,
00729                                          const Gan_Vector2_f *p, const Gan_Vector2_f *q,
00730                                          float s );
00731 
00743  Gan_Matrix33_f *gan_mat33f_set_cols_q ( Gan_Matrix33_f *A,
00744                                         const Gan_Vector3_f *p, const Gan_Vector3_f *q,
00745                                         const Gan_Vector3_f *r );
00746 
00759  Gan_Matrix33_f *gan_mat33f_set_rows_q ( Gan_Matrix33_f *A,
00760                                         const Gan_Vector3_f *p, const Gan_Vector3_f *q,
00761                                         const Gan_Vector3_f *r );
00762 
00768 #endif /* #ifndef _GAN_3X3MATF_H */
00769 
00770 #define GAN_MATTYPE Gan_Matrix33_f
00771 #define GAN_MATRIX_TYPE Gan_Matrix_f
00772 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
00773 #define GAN_VECTOR_TYPE Gan_Vector_f
00774 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
00775 #define GAN_REALTYPE float
00776 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
00777 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
00778 #define GAN_VECTYPE1 Gan_Vector3_f
00779 #define GAN_VECTYPE2 Gan_Vector3_f
00780 #define GAN_MATTYPEL Gan_Matrix33_f
00781 #define GAN_MATTYPER Gan_Matrix33_f
00782 #define GAN_SQUMATTYPEL Gan_SquMatrix33_f
00783 #define GAN_SQUMATTYPER Gan_SquMatrix33_f
00784 #define GAN_MAT_FPRINT                     gan_mat33f_fprint
00785 #define GAN_MAT_PRINT                      gan_mat33f_print
00786 #define GAN_MAT_FSCANF                     gan_mat33f_fscanf
00787 #define GAN_MAT_FWRITE                     gan_mat33f_fwrite
00788 #define GAN_MAT_FREAD                      gan_mat33f_fread
00789 #define GAN_MAT_ZERO_Q                     gan_mat33f_zero_q
00790 #define GAN_MAT_ZERO_S                     gan_mat33f_zero_s
00791 #define GAN_MAT_COPY_Q                     gan_mat33f_copy_q
00792 #define GAN_MAT_COPY_S                     gan_mat33f_copy_s
00793 #define GAN_MAT_SCALE_Q                    gan_mat33f_scale_q
00794 #define GAN_MAT_SCALE_I                    gan_mat33f_scale_i
00795 #define GAN_MAT_SCALE_S                    gan_mat33f_scale_s
00796 #define GAN_MAT_DIVIDE_Q                   gan_mat33f_divide_q
00797 #define GAN_MAT_DIVIDE_I                   gan_mat33f_divide_i
00798 #define GAN_MAT_DIVIDE_S                   gan_mat33f_divide_s
00799 #define GAN_MAT_NEGATE_Q                   gan_mat33f_negate_q
00800 #define GAN_MAT_NEGATE_I                   gan_mat33f_negate_i
00801 #define GAN_MAT_NEGATE_S                   gan_mat33f_negate_s
00802 #define GAN_MAT_UNIT_Q                     gan_mat33f_unit_q
00803 #define GAN_MAT_UNIT_I                     gan_mat33f_unit_i
00804 #define GAN_MAT_UNIT_S                     gan_mat33f_unit_s
00805 #define GAN_MAT_ADD_Q                      gan_mat33f_add_q
00806 #define GAN_MAT_ADD_I1                     gan_mat33f_add_i1
00807 #define GAN_MAT_ADD_I2                     gan_mat33f_add_i2
00808 #define GAN_MAT_INCREMENT                  gan_mat33f_increment
00809 #define GAN_MAT_ADD_S                      gan_mat33f_add_s
00810 #define GAN_MAT_SUB_Q                      gan_mat33f_sub_q
00811 #define GAN_MAT_SUB_I1                     gan_mat33f_sub_i1
00812 #define GAN_MAT_SUB_I2                     gan_mat33f_sub_i2
00813 #define GAN_MAT_DECREMENT                  gan_mat33f_decrement
00814 #define GAN_MAT_SUB_S                      gan_mat33f_sub_s
00815 #define GAN_VEC_OUTER_Q                    gan_vec33f_outer_q
00816 #define GAN_VEC_OUTER_S                    gan_vec33f_outer_s
00817 #define GAN_MAT_MULTV_Q                    gan_mat33f_multv3_q
00818 #define GAN_MAT_MULTV_S                    gan_mat33f_multv3_s
00819 #define GAN_MATT_MULTV_Q                   gan_mat33Tf_multv3_q
00820 #define GAN_MATT_MULTV_S                   gan_mat33Tf_multv3_s
00821 #define GAN_MAT_LMULTMT_Q                  gan_mat33f_lmultm33T_q
00822 #define GAN_MAT_LMULTMT_S                  gan_mat33f_lmultm33T_s
00823 #define GAN_MAT_RMULTM_Q                   gan_mat33f_rmultm33_q
00824 #define GAN_MAT_RMULTM_S                   gan_mat33f_rmultm33_s
00825 #define GAN_MAT_RMULTMT_Q                  gan_mat33f_rmultm33T_q
00826 #define GAN_MAT_RMULTMT_S                  gan_mat33f_rmultm33T_s
00827 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat33f_lmultm33T_sym_q
00828 #define GAN_MAT_LMULTMT_SYM_S              gan_mat33f_lmultm33T_sym_s
00829 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat33f_rmultm33T_sym_q
00830 #define GAN_MAT_RMULTMT_SYM_S              gan_mat33f_rmultm33T_sym_s
00831 #define GAN_MAT_SLMULTT_Q                  gan_mat33f_slmultT_q
00832 #define GAN_MAT_SLMULTT_S                  gan_mat33f_slmultT_s
00833 #define GAN_MAT_SRMULTT_Q                  gan_mat33f_srmultT_q
00834 #define GAN_MAT_SRMULTT_S                  gan_mat33f_srmultT_s
00835 #define GAN_MAT_LMULTS_Q                   gan_mat33f_lmults33_q
00836 #define GAN_MAT_LMULTS_S                   gan_mat33f_lmults33_s
00837 #define GAN_MAT_RMULTS_Q                   gan_mat33f_rmults33_q
00838 #define GAN_MAT_RMULTS_S                   gan_mat33f_rmults33_s
00839 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33f_lrmultm33T_q
00840 #define GAN_SYMMATL_LRMULT_S               gan_symmat33f_lrmultm33T_s
00841 #define GAN_SYMMATR_LRMULT_Q               gan_symmat33f_lrmultm33_q
00842 #define GAN_SYMMATR_LRMULT_S               gan_symmat33f_lrmultm33_s
00843 #define GAN_MAT_LMULTL_Q                   gan_mat33f_lmultl33_q
00844 #define GAN_MAT_LMULTL_S                   gan_mat33f_lmultl33_s
00845 #define GAN_MAT_LMULTL_I                   gan_mat33f_lmultl33_i
00846 #define GAN_MAT_LMULTLI_Q                  gan_mat33f_lmultl33I_q
00847 #define GAN_MAT_LMULTLI_S                  gan_mat33f_lmultl33I_s
00848 #define GAN_MAT_LMULTLI_I                  gan_mat33f_lmultl33I_i
00849 #define GAN_MAT_LMULTLT_Q                  gan_mat33f_lmultl33T_q
00850 #define GAN_MAT_LMULTLT_S                  gan_mat33f_lmultl33T_s
00851 #define GAN_MAT_LMULTLT_I                  gan_mat33f_lmultl33T_i
00852 #define GAN_MAT_LMULTLIT_Q                 gan_mat33f_lmultl33IT_q
00853 #define GAN_MAT_LMULTLIT_S                 gan_mat33f_lmultl33IT_s
00854 #define GAN_MAT_LMULTLIT_I                 gan_mat33f_lmultl33IT_i
00855 #define GAN_MAT_RMULTL_Q                   gan_mat33f_rmultl33_q
00856 #define GAN_MAT_RMULTL_S                   gan_mat33f_rmultl33_s
00857 #define GAN_MAT_RMULTL_I                   gan_mat33f_rmultl33_i
00858 #define GAN_MAT_RMULTLI_Q                  gan_mat33f_rmultl33I_q
00859 #define GAN_MAT_RMULTLI_S                  gan_mat33f_rmultl33I_s
00860 #define GAN_MAT_RMULTLI_I                  gan_mat33f_rmultl33I_i
00861 #define GAN_MAT_RMULTLT_Q                  gan_mat33f_rmultl33T_q
00862 #define GAN_MAT_RMULTLT_S                  gan_mat33f_rmultl33T_s
00863 #define GAN_MAT_RMULTLT_I                  gan_mat33f_rmultl33T_i
00864 #define GAN_MAT_RMULTLIT_Q                 gan_mat33f_rmultl33IT_q
00865 #define GAN_MAT_RMULTLIT_S                 gan_mat33f_rmultl33IT_s
00866 #define GAN_MAT_RMULTLIT_I                 gan_mat33f_rmultl33IT_i
00867 #define GAN_MAT_SUMSQR_Q                   gan_mat33f_sumsqr_q
00868 #define GAN_MAT_SUMSQR_S                   gan_mat33f_sumsqr_s
00869 #define GAN_MAT_FNORM_Q                    gan_mat33f_Fnorm_q
00870 #define GAN_MAT_FNORM_S                    gan_mat33f_Fnorm_s
00871 #define GAN_MAT_FROM_MAT_Q                 gan_mat33f_from_matf_q
00872 #define GAN_MAT_FROM_MAT_S                 gan_mat33f_from_matf_s
00873 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat33f_from_squmatf_q
00874 #define GAN_MAT_FROM_SQUMAT_S              gan_mat33f_from_squmatf_s
00875 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat33f_from_squmatf_q
00876 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat33f_from_squmatf_s
00877 
00878 #define GAN_SQUMAT_IDENT_Q    gan_mat33f_ident_q
00879 #define GAN_SQUMAT_IDENT_S    gan_mat33f_ident_s
00880 #define GAN_SQUMAT_TPOSE_Q    gan_mat33f_tpose_q
00881 #define GAN_SQUMAT_TPOSE_S    gan_mat33f_tpose_s
00882 #define GAN_SQUMAT_TPOSE_I    gan_mat33f_tpose_i
00883 #define GAN_MAT_SADDT_Q       gan_mat33f_saddT_q
00884 #define GAN_MAT_SADDT_S       gan_mat33f_saddT_s
00885 #define GAN_SQUMAT_INVERT     gan_mat33f_invert
00886 #define GAN_SQUMAT_INVERT_Q   gan_mat33f_invert_q
00887 #define GAN_SQUMAT_INVERT_S   gan_mat33f_invert_s
00888 #define GAN_SQUMAT_INVERT_I   gan_mat33f_invert_i
00889 #define GAN_SQUMAT_ADJOINT_Q  gan_mat33f_adjoint_q
00890 #define GAN_SQUMAT_ADJOINT_S  gan_mat33f_adjoint_s
00891 #define GAN_SQUMAT_ADJOINTT_Q gan_mat33f_adjointT_q
00892 #define GAN_SQUMAT_ADJOINTT_S gan_mat33f_adjointT_s
00893 #define GAN_SQUMAT_DET_Q      gan_mat33f_det_q
00894 #define GAN_SQUMAT_DET_S      gan_mat33f_det_s
00895 #define GAN_SQUMAT_TRACE_Q    gan_mat33f_trace_q
00896 #define GAN_SQUMAT_TRACE_S    gan_mat33f_trace_s
00897 
00898 #ifndef _GAN_3X3MATF_H
00899 #define _GAN_3X3MATF_H
00900 
00901 
00902 #endif /* #ifndef _GAN_3X3MATF_H */
00903 
00916 /* This library is free software; you can redistribute it and/or
00917    modify it under the terms of the GNU Lesser General Public
00918    License as published by the Free Software Foundation; either
00919    version 2.1 of the License, or (at your option) any later version.
00920 
00921    This library is distributed in the hope that it will be useful,
00922    but WITHOUT ANY WARRANTY; without even the implied warranty of
00923    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00924    Lesser General Public License for more details.
00925 
00926    You should have received a copy of the GNU Lesser General Public
00927    License along with this library; if not, write to the Free Software
00928    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00929 */
00930 
00931 /* function declarations for functions common to all small square matrix
00932  * types */
00933 
00934 
00935 
00936 /* documentation for macros defined in individual header files */
00937 
00950  Gan_Matrix33_f *gan_mat33f_ident_q ( Gan_Matrix33_f *A );
00951 
00969  Gan_Matrix33_f *gan_mat33f_tpose_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
00970 
00988  Gan_SquMatrix33_f *gan_mat33f_saddT_q ( const Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
00989 
01020  Gan_Matrix33_f *gan_mat33f_invert_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01021 
01030  Gan_Matrix33_f *gan_mat33f_invert_i ( Gan_Matrix33_f *A );
01031 
01046  float gan_mat33f_det_q ( const Gan_Matrix33_f *A );
01047 
01053  float gan_mat33f_trace_q ( const Gan_Matrix33_f *A );
01054 
01060 #undef GAN_SQUMAT_IDENT_Q
01061 #undef GAN_SQUMAT_IDENT_S
01062 #undef GAN_SQUMAT_TPOSE_Q
01063 #undef GAN_SQUMAT_TPOSE_S
01064 #undef GAN_SQUMAT_TPOSE_I
01065 #undef GAN_MAT_SADDT_Q
01066 #undef GAN_MAT_SADDT_S
01067 #undef GAN_SQUMATI_MULTV_Q
01068 #undef GAN_SQUMATI_MULTV_S
01069 #undef GAN_SQUMATI_MULTV_I
01070 #undef GAN_SQUMATIT_MULTV_Q
01071 #undef GAN_SQUMATIT_MULTV_S
01072 #undef GAN_SQUMATIT_MULTV_I
01073 #undef GAN_SQUMAT_INVERT
01074 #undef GAN_SQUMAT_INVERT_Q
01075 #undef GAN_SQUMAT_INVERT_S
01076 #undef GAN_SQUMAT_INVERT_I
01077 #undef GAN_SQUMAT_ADJOINT_Q
01078 #undef GAN_SQUMAT_ADJOINT_S
01079 #undef GAN_SQUMAT_ADJOINTT_Q
01080 #undef GAN_SQUMAT_ADJOINTT_S
01081 #undef GAN_SQUMAT_DET_Q
01082 #undef GAN_SQUMAT_DET_S
01083 #undef GAN_SQUMAT_TRACE_Q
01084 #undef GAN_SQUMAT_TRACE_S
01085 
01098 /* This library is free software; you can redistribute it and/or
01099    modify it under the terms of the GNU Lesser General Public
01100    License as published by the Free Software Foundation; either
01101    version 2.1 of the License, or (at your option) any later version.
01102 
01103    This library is distributed in the hope that it will be useful,
01104    but WITHOUT ANY WARRANTY; without even the implied warranty of
01105    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01106    Lesser General Public License for more details.
01107 
01108    You should have received a copy of the GNU Lesser General Public
01109    License along with this library; if not, write to the Free Software
01110    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01111 */
01112 
01113 /* function declarations for functions common to all small vector types */
01114 
01115 
01116 
01117 /* documentation for macros defined in individual header files */
01118 
01129  Gan_Matrix33_f *gan_mat33f_zero_q ( const Gan_Matrix33_f *A );
01130 
01147  Gan_Matrix33_f *gan_mat33f_copy_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01148 
01166  Gan_Matrix33_f *gan_mat33f_scale_q ( Gan_Matrix33_f *A, float a,
01167                                Gan_Matrix33_f *B );
01168 
01176  Gan_Matrix33_f *gan_mat33f_scale_i ( Gan_Matrix33_f *A, float a );
01177 
01186  Gan_Matrix33_f *gan_mat33f_divide_q ( Gan_Matrix33_f *A, float a,
01187                                 Gan_Matrix33_f *B );
01188 
01196  Gan_Matrix33_f *gan_mat33f_divide_i ( Gan_Matrix33_f *A, float a );
01197 
01205  Gan_Matrix33_f *gan_mat33f_negate_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01206 
01214  Gan_Matrix33_f *gan_mat33f_negate_i ( Gan_Matrix33_f *A );
01215 
01223  Gan_Matrix33_f *gan_mat33f_unit_i ( Gan_Matrix33_f *A );
01224 
01242  Gan_Matrix33_f *gan_mat33f_add_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B, Gan_Matrix33_f *C );
01243 
01252  Gan_Matrix33_f *gan_mat33f_add_i1 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01253 
01262  Gan_Matrix33_f *gan_mat33f_add_i2 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01263 
01272  Gan_Matrix33_f *gan_mat33f_increment ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01273 
01291  Gan_Matrix33_f *gan_mat33f_sub_q ( Gan_Matrix33_f *A, Gan_Matrix33_f *B, Gan_Matrix33_f *C );
01292 
01301  Gan_Matrix33_f *gan_mat33f_sub_i1 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01302 
01311  Gan_Matrix33_f *gan_mat33f_sub_i2 ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01312 
01321  Gan_Matrix33_f *gan_mat33f_decrement ( Gan_Matrix33_f *A, Gan_Matrix33_f *B );
01322 
01340  Gan_Matrix33_f *gan_vec33f_outer_q ( const Gan_Vector3_f *p, const Gan_Vector3_f *q,
01341                                Gan_Matrix33_f *A );
01342 
01351  Gan_Vector3_f *gan_mat33f_multv3_q ( const Gan_Matrix33_f *A, Gan_Vector3_f *p,
01352                                 Gan_Vector3_f *q );
01353 
01354 
01363  Gan_Vector3_f *gan_mat33Tf_multv3_q ( const Gan_Matrix33_f *A, Gan_Vector3_f *p,
01364                                  Gan_Vector3_f *q );
01365 
01366 
01386  Gan_Matrix33_f *gan_mat33f_lmultm33T_q ( Gan_Matrix33_f *A, const Gan_Matrix33_f *B,
01387                                  Gan_Matrix33_f *C );
01388 
01398  Gan_Matrix33_f *gan_mat33f_rmultm33_q ( Gan_Matrix33_f *A, const Gan_Matrix33_f *B,
01399                                 Gan_Matrix33_f *C );
01400 
01410  Gan_Matrix33_f *gan_mat33f_rmultm33T_q ( Gan_Matrix33_f *A, const Gan_Matrix33_f *B,
01411                                  Gan_Matrix33_f *C );
01412 
01424  Gan_SquMatrix33_f *gan_mat33f_lmultm33T_sym_q ( const Gan_Matrix33_f *A, const Gan_Matrix33_f *B,
01425                                          Gan_SquMatrix33_f *C );
01426 
01438  Gan_SquMatrix33_f *gan_mat33f_rmultm33T_sym_q ( const Gan_Matrix33_f *A, const Gan_Matrix33_f *B,
01439                                          Gan_SquMatrix33_f *C );
01440 
01449  Gan_Matrix33_f *gan_mat33f_lmults33_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01450                                 Gan_Matrix33_f *C );
01451 
01460  Gan_Matrix33_f *gan_mat33f_rmults33_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01461                                 Gan_Matrix33_f *C );
01462 
01482  Gan_SquMatrix33_f *gan_symmat33f_lrmultm33T_q ( const Gan_SquMatrix33_f *A, const Gan_Matrix33_f *B,
01483                                         const Gan_Matrix33_f *C, Gan_SquMatrix33_f *D );
01484 
01495  Gan_SquMatrix33_f *gan_symmat33f_lrmultm33_q ( const Gan_SquMatrix33_f *A, const Gan_Matrix33_f *B,
01496                                         const Gan_Matrix33_f *C, Gan_SquMatrix33_f *D );
01497 
01516  Gan_Matrix33_f *gan_mat33f_lmultl33_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01517                                 Gan_Matrix33_f *C );
01518 
01528  Gan_Matrix33_f *gan_mat33f_lmultl33I_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01529                                  Gan_Matrix33_f *C );
01530 
01540  Gan_Matrix33_f *gan_mat33f_lmultl33T_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01541                                  Gan_Matrix33_f *C );
01542 
01552  Gan_Matrix33_f *gan_mat33f_lmultl33IT_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01553                                   Gan_Matrix33_f *C );
01554 
01564  Gan_Matrix33_f *gan_mat33f_rmultl33_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01565                                 Gan_Matrix33_f *C );
01566 
01576  Gan_Matrix33_f *gan_mat33f_rmultl33I_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01577                                  Gan_Matrix33_f *C );
01578 
01588  Gan_Matrix33_f *gan_mat33f_rmultl33T_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01589                                  Gan_Matrix33_f *C );
01590 
01600  Gan_Matrix33_f *gan_mat33f_rmultl33IT_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B,
01601                                   Gan_Matrix33_f *C );
01602 
01612  Gan_Matrix33_f *gan_mat33f_lmultl33_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01613 
01623  Gan_Matrix33_f *gan_mat33f_lmultl33I_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01624 
01634  Gan_Matrix33_f *gan_mat33f_lmultl33T_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01635 
01645  Gan_Matrix33_f *gan_mat33f_lmultl33IT_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01646 
01656  Gan_Matrix33_f *gan_mat33f_rmultl33_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01657 
01667  Gan_Matrix33_f *gan_mat33f_rmultl33I_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01668 
01678  Gan_Matrix33_f *gan_mat33f_rmultl33T_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01679 
01689  Gan_Matrix33_f *gan_mat33f_rmultl33IT_i ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01690 
01699  Gan_SquMatrix33_f *gan_mat33f_slmultT_q ( Gan_Matrix33_f *A, const Gan_SquMatrix33_f *B );
01700 
01701 
01710  Gan_SquMatrix33_f *gan_mat33f_srmultT_q ( const Gan_Matrix33_f *A, Gan_SquMatrix33_f *B );
01711 
01712 
01727  float gan_mat33f_sumsqr_q ( const Gan_Matrix33_f *A );
01728 
01735  float gan_mat33f_Fnorm_q ( const Gan_Matrix33_f *A );
01736 
01746  Gan_Matrix33_f *gan_mat33f_from_matf_q ( const Gan_Matrix_f *A, Gan_Matrix33_f *B );
01747 
01748  Gan_Matrix33_f *gan_mat33f_from_squmatf_q ( const Gan_SquMatrix_f *A, Gan_Matrix33_f *B );
01749 
01750  Gan_SquMatrix33_f *gan_squmat33f_from_squmatf_q ( const Gan_SquMatrix_f *A,
01751                                             Gan_SquMatrix33_f *B );
01752 
01771 /* This library is free software; you can redistribute it and/or
01772    modify it under the terms of the GNU Lesser General Public
01773    License as published by the Free Software Foundation; either
01774    version 2.1 of the License, or (at your option) any later version.
01775 
01776    This library is distributed in the hope that it will be useful,
01777    but WITHOUT ANY WARRANTY; without even the implied warranty of
01778    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01779    Lesser General Public License for more details.
01780 
01781    You should have received a copy of the GNU Lesser General Public
01782    License along with this library; if not, write to the Free Software
01783    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01784 */
01785 
01786 #undef GAN_MATTYPE
01787 #undef GAN_MATRIX_TYPE
01788 #undef GAN_SQUMATRIX_TYPE
01789 #undef GAN_VECTOR_TYPE
01790 #undef GAN_MAT_ELEMENT_TYPE
01791 #undef GAN_REALTYPE
01792 #undef GAN_FWRITE_LENDIAN
01793 #undef GAN_FREAD_LENDIAN
01794 #undef GAN_VECTYPE1
01795 #undef GAN_VECTYPE2
01796 #undef GAN_MATTYPEL
01797 #undef GAN_MATTYPER
01798 #undef GAN_SQUMATTYPEL
01799 #undef GAN_SQUMATTYPER
01800 #undef GAN_FIXED_MATRIX_TYPE
01801 #undef GAN_MAT_FPRINT
01802 #undef GAN_MAT_PRINT
01803 #undef GAN_MAT_FSCANF
01804 #undef GAN_MAT_FWRITE
01805 #undef GAN_MAT_FREAD
01806 #undef GAN_MAT_ZERO_Q
01807 #undef GAN_MAT_ZERO_S
01808 #undef GAN_MAT_COPY_Q
01809 #undef GAN_MAT_COPY_S
01810 #undef GAN_MAT_SCALE_Q
01811 #undef GAN_MAT_SCALE_S
01812 #undef GAN_MAT_SCALE_I
01813 #undef GAN_MAT_DIVIDE_Q
01814 #undef GAN_MAT_DIVIDE_S
01815 #undef GAN_MAT_DIVIDE_I
01816 #undef GAN_MAT_NEGATE_Q
01817 #undef GAN_MAT_NEGATE_S
01818 #undef GAN_MAT_NEGATE_I
01819 #undef GAN_MAT_UNIT_Q
01820 #undef GAN_MAT_UNIT_S
01821 #undef GAN_MAT_UNIT_I
01822 #undef GAN_MAT_ADD_Q
01823 #undef GAN_MAT_ADD_I1
01824 #undef GAN_MAT_ADD_I2
01825 #undef GAN_MAT_INCREMENT
01826 #undef GAN_MAT_ADD_S
01827 #undef GAN_MAT_SUB_Q
01828 #undef GAN_MAT_SUB_I1
01829 #undef GAN_MAT_SUB_I2
01830 #undef GAN_MAT_DECREMENT
01831 #undef GAN_MAT_SUB_S
01832 #undef GAN_VEC_OUTER_Q
01833 #undef GAN_VEC_OUTER_S
01834 #undef GAN_MAT_MULTV_Q
01835 #undef GAN_MAT_MULTV_S
01836 #undef GAN_MAT_MULTV_I
01837 #undef GAN_MATT_MULTV_Q
01838 #undef GAN_MATT_MULTV_S
01839 #undef GAN_MATT_MULTV_I
01840 #undef GAN_MAT_LMULTM_Q
01841 #undef GAN_MAT_LMULTM_S
01842 #undef GAN_MAT_LMULTMT_Q
01843 #undef GAN_MAT_LMULTMT_S
01844 #undef GAN_MAT_RMULTM_Q
01845 #undef GAN_MAT_RMULTM_S
01846 #undef GAN_MAT_RMULTMT_Q
01847 #undef GAN_MAT_RMULTMT_S
01848 #undef GAN_MAT_LMULTMT_SYM_Q
01849 #undef GAN_MAT_LMULTMT_SYM_S
01850 #undef GAN_MAT_RMULTMT_SYM_Q
01851 #undef GAN_MAT_RMULTMT_SYM_S
01852 #undef GAN_MAT_LMULTS_Q
01853 #undef GAN_MAT_LMULTS_S
01854 #undef GAN_MAT_RMULTS_Q
01855 #undef GAN_MAT_RMULTS_S
01856 #undef GAN_SYMMATL_LRMULT_Q
01857 #undef GAN_SYMMATL_LRMULT_S
01858 #undef GAN_SYMMATR_LRMULT_Q
01859 #undef GAN_SYMMATR_LRMULT_S
01860 #undef GAN_MAT_LMULTL_Q
01861 #undef GAN_MAT_LMULTL_S
01862 #undef GAN_MAT_LMULTL_I
01863 #undef GAN_MAT_LMULTLI_Q
01864 #undef GAN_MAT_LMULTLI_S
01865 #undef GAN_MAT_LMULTLI_I
01866 #undef GAN_MAT_LMULTLT_Q
01867 #undef GAN_MAT_LMULTLT_S
01868 #undef GAN_MAT_LMULTLT_I
01869 #undef GAN_MAT_LMULTLIT_Q
01870 #undef GAN_MAT_LMULTLIT_S
01871 #undef GAN_MAT_LMULTLIT_I
01872 #undef GAN_MAT_RMULTL_Q
01873 #undef GAN_MAT_RMULTL_S
01874 #undef GAN_MAT_RMULTL_I
01875 #undef GAN_MAT_RMULTLI_Q
01876 #undef GAN_MAT_RMULTLI_S
01877 #undef GAN_MAT_RMULTLI_I
01878 #undef GAN_MAT_RMULTLT_Q
01879 #undef GAN_MAT_RMULTLT_S
01880 #undef GAN_MAT_RMULTLT_I
01881 #undef GAN_MAT_RMULTLIT_Q
01882 #undef GAN_MAT_RMULTLIT_S
01883 #undef GAN_MAT_RMULTLIT_I
01884 #undef GAN_MAT_SRMULTT_Q
01885 #undef GAN_MAT_SRMULTT_S
01886 #undef GAN_MAT_SRMULTT_I
01887 #undef GAN_MAT_SLMULTT_Q
01888 #undef GAN_MAT_SLMULTT_S
01889 #undef GAN_MAT_SLMULTT_I
01890 #undef GAN_MAT_RMULTLIT_S
01891 #undef GAN_MAT_SUMSQR_Q
01892 #undef GAN_MAT_SUMSQR_S
01893 #undef GAN_MAT_FNORM_Q
01894 #undef GAN_MAT_FNORM_S
01895 #undef GAN_MAT_FROM_MAT_Q
01896 #undef GAN_MAT_FROM_MAT_S
01897 #undef GAN_MAT_FROM_SQUMAT_Q
01898 #undef GAN_MAT_FROM_SQUMAT_S
01899 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01900 #undef GAN_SQUMAT_FROM_SQUMAT_S
01901 
01902 /* declare functions specific to symmetric 3x3 matrices */
01916 /* This library is free software; you can redistribute it and/or
01917    modify it under the terms of the GNU Lesser General Public
01918    License as published by the Free Software Foundation; either
01919    version 2.1 of the License, or (at your option) any later version.
01920 
01921    This library is distributed in the hope that it will be useful,
01922    but WITHOUT ANY WARRANTY; without even the implied warranty of
01923    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01924    Lesser General Public License for more details.
01925 
01926    You should have received a copy of the GNU Lesser General Public
01927    License along with this library; if not, write to the Free Software
01928    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01929 */
01930 
01931 #ifndef _GAN_3X3SYMMATF_H
01932 
01946  Gan_SquMatrix33_f *gan_symmat33f_fill_q ( Gan_SquMatrix33_f *A,
01947                                           float XX,
01948                                           float YX, float YY,
01949                                           float ZX, float ZY, float ZZ );
01950 
01972  void gan_symmat33f_get_parts_q ( const Gan_SquMatrix33_f *A,
01973                                  Gan_SquMatrix22_f *B, Gan_Vector2_f *p,
01974                                  float *s );
01975 
01998  Gan_SquMatrix33_f *gan_symmat33f_set_parts_q ( Gan_SquMatrix33_f *A,
01999                                                const Gan_SquMatrix22_f *B,
02000                                                const Gan_Vector2_f *p, float s );
02001 
02007 #endif /* #ifndef _GAN_3X3SYMMATF_H */
02008 
02009 #define GAN_MATTYPE Gan_SquMatrix33_f
02010 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02011 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02012 #define GAN_VECTOR_TYPE Gan_Vector_f
02013 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02014 #define GAN_REALTYPE float
02015 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
02016 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
02017 #define GAN_VECTYPE1 Gan_Vector3_f
02018 #define GAN_VECTYPE2 Gan_Vector3_f
02019 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX33_F
02020 #define GAN_MAT_FPRINT      gan_symmat33f_fprint
02021 #define GAN_MAT_PRINT       gan_symmat33f_print
02022 #define GAN_MAT_FSCANF      gan_symmat33f_fscanf
02023 #define GAN_MAT_FWRITE      gan_symmat33f_fwrite
02024 #define GAN_MAT_FREAD       gan_symmat33f_fread
02025 #define GAN_MAT_ZERO_Q      gan_symmat33f_zero_q
02026 #define GAN_MAT_ZERO_S      gan_symmat33f_zero_s
02027 #define GAN_MAT_COPY_Q      gan_symmat33f_copy_q
02028 #define GAN_MAT_COPY_S      gan_symmat33f_copy_s
02029 #define GAN_MAT_SCALE_Q     gan_symmat33f_scale_q
02030 #define GAN_MAT_SCALE_S     gan_symmat33f_scale_s
02031 #define GAN_MAT_SCALE_I     gan_symmat33f_scale_i
02032 #define GAN_MAT_DIVIDE_Q    gan_symmat33f_divide_q
02033 #define GAN_MAT_DIVIDE_S    gan_symmat33f_divide_s
02034 #define GAN_MAT_DIVIDE_I    gan_symmat33f_divide_i
02035 #define GAN_MAT_NEGATE_Q    gan_symmat33f_negate_q
02036 #define GAN_MAT_NEGATE_S    gan_symmat33f_negate_s
02037 #define GAN_MAT_NEGATE_I    gan_symmat33f_negate_i
02038 #define GAN_MAT_UNIT_Q      gan_symmat33f_unit_q
02039 #define GAN_MAT_UNIT_S      gan_symmat33f_unit_s
02040 #define GAN_MAT_UNIT_I      gan_symmat33f_unit_i
02041 #define GAN_MAT_ADD_Q       gan_symmat33f_add_q
02042 #define GAN_MAT_ADD_I1      gan_symmat33f_add_i1
02043 #define GAN_MAT_ADD_I2      gan_symmat33f_add_i2
02044 #define GAN_MAT_INCREMENT   gan_symmat33f_increment
02045 #define GAN_MAT_ADD_S       gan_symmat33f_add_s
02046 #define GAN_MAT_SUB_Q       gan_symmat33f_sub_q
02047 #define GAN_MAT_SUB_I1      gan_symmat33f_sub_i1
02048 #define GAN_MAT_SUB_I2      gan_symmat33f_sub_i2
02049 #define GAN_MAT_DECREMENT   gan_symmat33f_decrement
02050 #define GAN_MAT_SUB_S       gan_symmat33f_sub_s
02051 #define GAN_MAT_MULTV_Q     gan_symmat33f_multv3_q
02052 #define GAN_MAT_MULTV_S     gan_symmat33f_multv3_s
02053 #define GAN_MAT_SUMSQR_Q    gan_symmat33f_sumsqr_q
02054 #define GAN_MAT_SUMSQR_S    gan_symmat33f_sumsqr_s
02055 #define GAN_MAT_FNORM_Q     gan_symmat33f_Fnorm_q
02056 #define GAN_MAT_FNORM_S     gan_symmat33f_Fnorm_s
02057 
02058 #define GAN_SQUMAT_IDENT_Q    gan_symmat33f_ident_q
02059 #define GAN_SQUMAT_IDENT_S    gan_symmat33f_ident_s
02060 #define GAN_SQUMAT_INVERT     gan_symmat33f_invert
02061 #define GAN_SQUMAT_INVERT_Q   gan_symmat33f_invert_q
02062 #define GAN_SQUMAT_INVERT_S   gan_symmat33f_invert_s
02063 #define GAN_SQUMAT_INVERT_I   gan_symmat33f_invert_i
02064 #define GAN_SQUMAT_DET_Q      gan_symmat33f_det_q
02065 #define GAN_SQUMAT_DET_S      gan_symmat33f_det_s
02066 #define GAN_SQUMAT_TRACE_Q    gan_symmat33f_trace_q
02067 #define GAN_SQUMAT_TRACE_S    gan_symmat33f_trace_s
02068 
02069 #define GAN_VEC_OUTER_SYM_Q gan_vec33f_outer_sym_q
02070 #define GAN_VEC_OUTER_SYM_S gan_vec33f_outer_sym_s
02071 #define GAN_SYMMAT_CHOLESKY   gan_symmat33f_cholesky
02072 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat33f_cholesky_q
02073 #define GAN_SYMMAT_CHOLESKY_S gan_symmat33f_cholesky_s
02074 #define GAN_SYMMAT_CHOLESKY_I gan_symmat33f_cholesky_i
02075 
02076 #ifndef _GAN_3X3SYMMATF_H
02077 #define _GAN_3X3SYMMATF_H
02078 
02079 
02080 #endif /* #ifndef _GAN_3X3SYMMATF_H */
02081 
02094 /* This library is free software; you can redistribute it and/or
02095    modify it under the terms of the GNU Lesser General Public
02096    License as published by the Free Software Foundation; either
02097    version 2.1 of the License, or (at your option) any later version.
02098 
02099    This library is distributed in the hope that it will be useful,
02100    but WITHOUT ANY WARRANTY; without even the implied warranty of
02101    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02102    Lesser General Public License for more details.
02103 
02104    You should have received a copy of the GNU Lesser General Public
02105    License along with this library; if not, write to the Free Software
02106    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02107 */
02108 
02109 /* function declarations for functions common to all small symmetric matrix
02110  * types */
02111 
02112 
02113 
02114 /* documentation for macros defined in individual header files */
02115 
02126  Gan_SquMatrix33_f *gan_vec33f_outer_sym_q ( const Gan_Vector3_f *p, Gan_SquMatrix33_f *A );
02127 
02149  Gan_SquMatrix33_f *gan_symmat33f_cholesky_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02150 
02159  Gan_SquMatrix33_f *gan_symmat33f_cholesky_i ( Gan_SquMatrix33_f *A );
02160 
02166 #undef GAN_VEC_OUTER_SYM_Q
02167 #undef GAN_VEC_OUTER_SYM_S
02168 #undef GAN_SYMMAT_CHOLESKY
02169 #undef GAN_SYMMAT_CHOLESKY_Q
02170 #undef GAN_SYMMAT_CHOLESKY_S
02171 #undef GAN_SYMMAT_CHOLESKY_I
02172 
02185 /* This library is free software; you can redistribute it and/or
02186    modify it under the terms of the GNU Lesser General Public
02187    License as published by the Free Software Foundation; either
02188    version 2.1 of the License, or (at your option) any later version.
02189 
02190    This library is distributed in the hope that it will be useful,
02191    but WITHOUT ANY WARRANTY; without even the implied warranty of
02192    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02193    Lesser General Public License for more details.
02194 
02195    You should have received a copy of the GNU Lesser General Public
02196    License along with this library; if not, write to the Free Software
02197    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02198 */
02199 
02200 /* function declarations for functions common to all small square matrix
02201  * types */
02202 
02203 
02204 
02205 /* documentation for macros defined in individual header files */
02206 
02219  Gan_SquMatrix33_f *gan_symmat33f_ident_q ( Gan_SquMatrix33_f *A );
02220 
02271  Gan_SquMatrix33_f *gan_symmat33f_invert_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02272 
02281  Gan_SquMatrix33_f *gan_symmat33f_invert_i ( Gan_SquMatrix33_f *A );
02282 
02297  float gan_symmat33f_det_q ( const Gan_SquMatrix33_f *A );
02298 
02304  float gan_symmat33f_trace_q ( const Gan_SquMatrix33_f *A );
02305 
02311 #undef GAN_SQUMAT_IDENT_Q
02312 #undef GAN_SQUMAT_IDENT_S
02313 #undef GAN_SQUMAT_TPOSE_Q
02314 #undef GAN_SQUMAT_TPOSE_S
02315 #undef GAN_SQUMAT_TPOSE_I
02316 #undef GAN_MAT_SADDT_Q
02317 #undef GAN_MAT_SADDT_S
02318 #undef GAN_SQUMATI_MULTV_Q
02319 #undef GAN_SQUMATI_MULTV_S
02320 #undef GAN_SQUMATI_MULTV_I
02321 #undef GAN_SQUMATIT_MULTV_Q
02322 #undef GAN_SQUMATIT_MULTV_S
02323 #undef GAN_SQUMATIT_MULTV_I
02324 #undef GAN_SQUMAT_INVERT
02325 #undef GAN_SQUMAT_INVERT_Q
02326 #undef GAN_SQUMAT_INVERT_S
02327 #undef GAN_SQUMAT_INVERT_I
02328 #undef GAN_SQUMAT_ADJOINT_Q
02329 #undef GAN_SQUMAT_ADJOINT_S
02330 #undef GAN_SQUMAT_ADJOINTT_Q
02331 #undef GAN_SQUMAT_ADJOINTT_S
02332 #undef GAN_SQUMAT_DET_Q
02333 #undef GAN_SQUMAT_DET_S
02334 #undef GAN_SQUMAT_TRACE_Q
02335 #undef GAN_SQUMAT_TRACE_S
02336 
02349 /* This library is free software; you can redistribute it and/or
02350    modify it under the terms of the GNU Lesser General Public
02351    License as published by the Free Software Foundation; either
02352    version 2.1 of the License, or (at your option) any later version.
02353 
02354    This library is distributed in the hope that it will be useful,
02355    but WITHOUT ANY WARRANTY; without even the implied warranty of
02356    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02357    Lesser General Public License for more details.
02358 
02359    You should have received a copy of the GNU Lesser General Public
02360    License along with this library; if not, write to the Free Software
02361    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02362 */
02363 
02364 /* function declarations for functions common to all small vector types */
02365 
02366 
02367 
02368 /* documentation for macros defined in individual header files */
02369 
02380  Gan_SquMatrix33_f *gan_symmat33f_zero_q ( const Gan_SquMatrix33_f *A );
02381 
02398  Gan_SquMatrix33_f *gan_symmat33f_copy_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02399 
02417  Gan_SquMatrix33_f *gan_symmat33f_scale_q ( Gan_SquMatrix33_f *A, float a,
02418                                Gan_SquMatrix33_f *B );
02419 
02427  Gan_SquMatrix33_f *gan_symmat33f_scale_i ( Gan_SquMatrix33_f *A, float a );
02428 
02437  Gan_SquMatrix33_f *gan_symmat33f_divide_q ( Gan_SquMatrix33_f *A, float a,
02438                                 Gan_SquMatrix33_f *B );
02439 
02447  Gan_SquMatrix33_f *gan_symmat33f_divide_i ( Gan_SquMatrix33_f *A, float a );
02448 
02456  Gan_SquMatrix33_f *gan_symmat33f_negate_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02457 
02465  Gan_SquMatrix33_f *gan_symmat33f_negate_i ( Gan_SquMatrix33_f *A );
02466 
02474  Gan_SquMatrix33_f *gan_symmat33f_unit_i ( Gan_SquMatrix33_f *A );
02475 
02493  Gan_SquMatrix33_f *gan_symmat33f_add_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
02494 
02503  Gan_SquMatrix33_f *gan_symmat33f_add_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02504 
02513  Gan_SquMatrix33_f *gan_symmat33f_add_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02514 
02523  Gan_SquMatrix33_f *gan_symmat33f_increment ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02524 
02542  Gan_SquMatrix33_f *gan_symmat33f_sub_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
02543 
02552  Gan_SquMatrix33_f *gan_symmat33f_sub_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02553 
02562  Gan_SquMatrix33_f *gan_symmat33f_sub_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02563 
02572  Gan_SquMatrix33_f *gan_symmat33f_decrement ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
02573 
02592  Gan_Vector3_f *gan_symmat33f_multv3_q ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
02593                                 Gan_Vector3_f *q );
02594 
02595 
02596 
02597 
02669  float gan_symmat33f_sumsqr_q ( const Gan_SquMatrix33_f *A );
02670 
02677  float gan_symmat33f_Fnorm_q ( const Gan_SquMatrix33_f *A );
02678 
02709 /* This library is free software; you can redistribute it and/or
02710    modify it under the terms of the GNU Lesser General Public
02711    License as published by the Free Software Foundation; either
02712    version 2.1 of the License, or (at your option) any later version.
02713 
02714    This library is distributed in the hope that it will be useful,
02715    but WITHOUT ANY WARRANTY; without even the implied warranty of
02716    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02717    Lesser General Public License for more details.
02718 
02719    You should have received a copy of the GNU Lesser General Public
02720    License along with this library; if not, write to the Free Software
02721    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02722 */
02723 
02724 #undef GAN_MATTYPE
02725 #undef GAN_MATRIX_TYPE
02726 #undef GAN_SQUMATRIX_TYPE
02727 #undef GAN_VECTOR_TYPE
02728 #undef GAN_MAT_ELEMENT_TYPE
02729 #undef GAN_REALTYPE
02730 #undef GAN_FWRITE_LENDIAN
02731 #undef GAN_FREAD_LENDIAN
02732 #undef GAN_VECTYPE1
02733 #undef GAN_VECTYPE2
02734 #undef GAN_MATTYPEL
02735 #undef GAN_MATTYPER
02736 #undef GAN_SQUMATTYPEL
02737 #undef GAN_SQUMATTYPER
02738 #undef GAN_FIXED_MATRIX_TYPE
02739 #undef GAN_MAT_FPRINT
02740 #undef GAN_MAT_PRINT
02741 #undef GAN_MAT_FSCANF
02742 #undef GAN_MAT_FWRITE
02743 #undef GAN_MAT_FREAD
02744 #undef GAN_MAT_ZERO_Q
02745 #undef GAN_MAT_ZERO_S
02746 #undef GAN_MAT_COPY_Q
02747 #undef GAN_MAT_COPY_S
02748 #undef GAN_MAT_SCALE_Q
02749 #undef GAN_MAT_SCALE_S
02750 #undef GAN_MAT_SCALE_I
02751 #undef GAN_MAT_DIVIDE_Q
02752 #undef GAN_MAT_DIVIDE_S
02753 #undef GAN_MAT_DIVIDE_I
02754 #undef GAN_MAT_NEGATE_Q
02755 #undef GAN_MAT_NEGATE_S
02756 #undef GAN_MAT_NEGATE_I
02757 #undef GAN_MAT_UNIT_Q
02758 #undef GAN_MAT_UNIT_S
02759 #undef GAN_MAT_UNIT_I
02760 #undef GAN_MAT_ADD_Q
02761 #undef GAN_MAT_ADD_I1
02762 #undef GAN_MAT_ADD_I2
02763 #undef GAN_MAT_INCREMENT
02764 #undef GAN_MAT_ADD_S
02765 #undef GAN_MAT_SUB_Q
02766 #undef GAN_MAT_SUB_I1
02767 #undef GAN_MAT_SUB_I2
02768 #undef GAN_MAT_DECREMENT
02769 #undef GAN_MAT_SUB_S
02770 #undef GAN_VEC_OUTER_Q
02771 #undef GAN_VEC_OUTER_S
02772 #undef GAN_MAT_MULTV_Q
02773 #undef GAN_MAT_MULTV_S
02774 #undef GAN_MAT_MULTV_I
02775 #undef GAN_MATT_MULTV_Q
02776 #undef GAN_MATT_MULTV_S
02777 #undef GAN_MATT_MULTV_I
02778 #undef GAN_MAT_LMULTM_Q
02779 #undef GAN_MAT_LMULTM_S
02780 #undef GAN_MAT_LMULTMT_Q
02781 #undef GAN_MAT_LMULTMT_S
02782 #undef GAN_MAT_RMULTM_Q
02783 #undef GAN_MAT_RMULTM_S
02784 #undef GAN_MAT_RMULTMT_Q
02785 #undef GAN_MAT_RMULTMT_S
02786 #undef GAN_MAT_LMULTMT_SYM_Q
02787 #undef GAN_MAT_LMULTMT_SYM_S
02788 #undef GAN_MAT_RMULTMT_SYM_Q
02789 #undef GAN_MAT_RMULTMT_SYM_S
02790 #undef GAN_MAT_LMULTS_Q
02791 #undef GAN_MAT_LMULTS_S
02792 #undef GAN_MAT_RMULTS_Q
02793 #undef GAN_MAT_RMULTS_S
02794 #undef GAN_SYMMATL_LRMULT_Q
02795 #undef GAN_SYMMATL_LRMULT_S
02796 #undef GAN_SYMMATR_LRMULT_Q
02797 #undef GAN_SYMMATR_LRMULT_S
02798 #undef GAN_MAT_LMULTL_Q
02799 #undef GAN_MAT_LMULTL_S
02800 #undef GAN_MAT_LMULTL_I
02801 #undef GAN_MAT_LMULTLI_Q
02802 #undef GAN_MAT_LMULTLI_S
02803 #undef GAN_MAT_LMULTLI_I
02804 #undef GAN_MAT_LMULTLT_Q
02805 #undef GAN_MAT_LMULTLT_S
02806 #undef GAN_MAT_LMULTLT_I
02807 #undef GAN_MAT_LMULTLIT_Q
02808 #undef GAN_MAT_LMULTLIT_S
02809 #undef GAN_MAT_LMULTLIT_I
02810 #undef GAN_MAT_RMULTL_Q
02811 #undef GAN_MAT_RMULTL_S
02812 #undef GAN_MAT_RMULTL_I
02813 #undef GAN_MAT_RMULTLI_Q
02814 #undef GAN_MAT_RMULTLI_S
02815 #undef GAN_MAT_RMULTLI_I
02816 #undef GAN_MAT_RMULTLT_Q
02817 #undef GAN_MAT_RMULTLT_S
02818 #undef GAN_MAT_RMULTLT_I
02819 #undef GAN_MAT_RMULTLIT_Q
02820 #undef GAN_MAT_RMULTLIT_S
02821 #undef GAN_MAT_RMULTLIT_I
02822 #undef GAN_MAT_SRMULTT_Q
02823 #undef GAN_MAT_SRMULTT_S
02824 #undef GAN_MAT_SRMULTT_I
02825 #undef GAN_MAT_SLMULTT_Q
02826 #undef GAN_MAT_SLMULTT_S
02827 #undef GAN_MAT_SLMULTT_I
02828 #undef GAN_MAT_RMULTLIT_S
02829 #undef GAN_MAT_SUMSQR_Q
02830 #undef GAN_MAT_SUMSQR_S
02831 #undef GAN_MAT_FNORM_Q
02832 #undef GAN_MAT_FNORM_S
02833 #undef GAN_MAT_FROM_MAT_Q
02834 #undef GAN_MAT_FROM_MAT_S
02835 #undef GAN_MAT_FROM_SQUMAT_Q
02836 #undef GAN_MAT_FROM_SQUMAT_S
02837 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02838 #undef GAN_SQUMAT_FROM_SQUMAT_S
02839 
02840 /* declare functions specific to lower triangular 3x3 matrices */
02854 /* This library is free software; you can redistribute it and/or
02855    modify it under the terms of the GNU Lesser General Public
02856    License as published by the Free Software Foundation; either
02857    version 2.1 of the License, or (at your option) any later version.
02858 
02859    This library is distributed in the hope that it will be useful,
02860    but WITHOUT ANY WARRANTY; without even the implied warranty of
02861    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02862    Lesser General Public License for more details.
02863 
02864    You should have received a copy of the GNU Lesser General Public
02865    License along with this library; if not, write to the Free Software
02866    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02867 */
02868 
02869 #ifndef _GAN_3X3LTMATF_H
02870 
02886  Gan_SquMatrix33_f *gan_ltmat33f_fill_q ( Gan_SquMatrix33_f *A,
02887                                          float XX,
02888                                          float YX, float YY,
02889                                          float ZX, float ZY, float ZZ );
02890 
02910  void gan_ltmat33f_get_parts_q ( const Gan_SquMatrix33_f *A,
02911                                 Gan_SquMatrix22_f *B, Gan_Vector2_f *p,
02912                                 float *s );
02913 
02936  Gan_SquMatrix33_f * gan_ltmat33f_set_parts_q ( Gan_SquMatrix33_f *A,
02937                                                const Gan_SquMatrix22_f *B,
02938                                                const Gan_Vector2_f *p, float s );
02939 
02945 #endif /* #ifndef _GAN_3X3LTMATF_H */
02946 
02947 #define GAN_MATTYPE Gan_SquMatrix33_f
02948 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
02949 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
02950 #define GAN_VECTOR_TYPE Gan_Vector_f
02951 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
02952 #define GAN_REALTYPE float
02953 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f32
02954 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f32
02955 #define GAN_VECTYPE1 Gan_Vector3_f
02956 #define GAN_VECTYPE2 Gan_Vector3_f
02957 #define GAN_SQUMATTYPEL Gan_SquMatrix33_f
02958 #define GAN_SQUMATTYPER Gan_SquMatrix33_f
02959 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33_F
02960 #define GAN_MAT_FPRINT     gan_ltmat33f_fprint
02961 #define GAN_MAT_PRINT      gan_ltmat33f_print
02962 #define GAN_MAT_FSCANF     gan_ltmat33f_fscanf
02963 #define GAN_MAT_FWRITE     gan_ltmat33f_fwrite
02964 #define GAN_MAT_FREAD      gan_ltmat33f_fread
02965 #define GAN_MAT_ZERO_Q     gan_ltmat33f_zero_q
02966 #define GAN_MAT_ZERO_S     gan_ltmat33f_zero_s
02967 #define GAN_MAT_COPY_Q     gan_ltmat33f_copy_q
02968 #define GAN_MAT_COPY_S     gan_ltmat33f_copy_s
02969 #define GAN_MAT_SCALE_Q    gan_ltmat33f_scale_q
02970 #define GAN_MAT_SCALE_S    gan_ltmat33f_scale_s
02971 #define GAN_MAT_SCALE_I    gan_ltmat33f_scale_i
02972 #define GAN_MAT_DIVIDE_Q   gan_ltmat33f_divide_q
02973 #define GAN_MAT_DIVIDE_S   gan_ltmat33f_divide_s
02974 #define GAN_MAT_DIVIDE_I   gan_ltmat33f_divide_i
02975 #define GAN_MAT_NEGATE_Q   gan_ltmat33f_negate_q
02976 #define GAN_MAT_NEGATE_S   gan_ltmat33f_negate_s
02977 #define GAN_MAT_NEGATE_I   gan_ltmat33f_negate_i
02978 #define GAN_MAT_UNIT_Q     gan_ltmat33f_unit_q
02979 #define GAN_MAT_UNIT_S     gan_ltmat33f_unit_s
02980 #define GAN_MAT_UNIT_I     gan_ltmat33f_unit_i
02981 #define GAN_MAT_ADD_Q      gan_ltmat33f_add_q
02982 #define GAN_MAT_ADD_I1     gan_ltmat33f_add_i1
02983 #define GAN_MAT_ADD_I2     gan_ltmat33f_add_i2
02984 #define GAN_MAT_INCREMENT  gan_ltmat33f_increment
02985 #define GAN_MAT_ADD_S      gan_ltmat33f_add_s
02986 #define GAN_MAT_SUB_Q      gan_ltmat33f_sub_q
02987 #define GAN_MAT_SUB_I1     gan_ltmat33f_sub_i1
02988 #define GAN_MAT_SUB_I2     gan_ltmat33f_sub_i2
02989 #define GAN_MAT_DECREMENT  gan_ltmat33f_decrement
02990 #define GAN_MAT_SUB_S      gan_ltmat33f_sub_s
02991 #define GAN_MAT_MULTV_Q    gan_ltmat33f_multv3_q
02992 #define GAN_MAT_MULTV_S    gan_ltmat33f_multv3_s
02993 #define GAN_MAT_MULTV_I    gan_ltmat33f_multv3_i
02994 #define GAN_MATT_MULTV_Q   gan_ltmat33Tf_multv3_q
02995 #define GAN_MATT_MULTV_S   gan_ltmat33Tf_multv3_s
02996 #define GAN_MATT_MULTV_I   gan_ltmat33Tf_multv3_i
02997 #define GAN_MAT_SRMULTT_Q  gan_ltmat33f_srmultT_q
02998 #define GAN_MAT_SRMULTT_S  gan_ltmat33f_srmultT_s
02999 #define GAN_MAT_SRMULTT_I  gan_ltmat33f_srmultT_i
03000 #define GAN_MAT_SLMULTT_Q  gan_ltmat33f_slmultT_q
03001 #define GAN_MAT_SLMULTT_S  gan_ltmat33f_slmultT_s
03002 #define GAN_MAT_SLMULTT_I  gan_ltmat33f_slmultT_i
03003 #define GAN_MAT_SUMSQR_Q   gan_ltmat33f_sumsqr_q
03004 #define GAN_MAT_SUMSQR_S   gan_ltmat33f_sumsqr_s
03005 #define GAN_MAT_FNORM_Q    gan_ltmat33f_Fnorm_q
03006 #define GAN_MAT_FNORM_S    gan_ltmat33f_Fnorm_s
03007 
03008 #define GAN_SQUMAT_IDENT_Q    gan_ltmat33f_ident_q
03009 #define GAN_SQUMAT_IDENT_S    gan_ltmat33f_ident_s
03010 #define GAN_SQUMATI_MULTV_Q   gan_ltmat33If_multv3_q
03011 #define GAN_SQUMATI_MULTV_S   gan_ltmat33If_multv3_s
03012 #define GAN_SQUMATI_MULTV_I   gan_ltmat33If_multv3_i
03013 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat33ITf_multv3_q
03014 #define GAN_SQUMATIT_MULTV_S  gan_ltmat33ITf_multv3_s
03015 #define GAN_SQUMATIT_MULTV_I  gan_ltmat33ITf_multv3_i
03016 #define GAN_SQUMAT_INVERT     gan_ltmat33f_invert
03017 #define GAN_SQUMAT_INVERT_Q   gan_ltmat33f_invert_q
03018 #define GAN_SQUMAT_INVERT_S   gan_ltmat33f_invert_s
03019 #define GAN_SQUMAT_INVERT_I   gan_ltmat33f_invert_i
03020 #define GAN_SQUMAT_DET_Q      gan_ltmat33f_det_q
03021 #define GAN_SQUMAT_DET_S      gan_ltmat33f_det_s
03022 #define GAN_SQUMAT_TRACE_Q    gan_ltmat33f_trace_q
03023 #define GAN_SQUMAT_TRACE_S    gan_ltmat33f_trace_s
03024 
03025 #ifndef _GAN_3X3LTMATF_H
03026 #define _GAN_3X3LTMATF_H
03027 
03028 
03029 #endif /* #ifndef _GAN_3X3LTMATF_H */
03030 
03043 /* This library is free software; you can redistribute it and/or
03044    modify it under the terms of the GNU Lesser General Public
03045    License as published by the Free Software Foundation; either
03046    version 2.1 of the License, or (at your option) any later version.
03047 
03048    This library is distributed in the hope that it will be useful,
03049    but WITHOUT ANY WARRANTY; without even the implied warranty of
03050    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03051    Lesser General Public License for more details.
03052 
03053    You should have received a copy of the GNU Lesser General Public
03054    License along with this library; if not, write to the Free Software
03055    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03056 */
03057 
03058 /* function declarations for functions common to all small square matrix
03059  * types */
03060 
03061 
03062 
03063 /* documentation for macros defined in individual header files */
03064 
03077  Gan_SquMatrix33_f *gan_ltmat33f_ident_q ( Gan_SquMatrix33_f *A );
03078 
03116  Gan_Vector3_f *gan_ltmat33If_multv3_q ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03117                                     Gan_Vector3_f *q );
03118 
03127  Gan_Vector3_f *gan_ltmat33If_multv3_i ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03128 
03137  Gan_Vector3_f *gan_ltmat33ITf_multv3_q ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03138                                      Gan_Vector3_f *q );
03139 
03148  Gan_Vector3_f *gan_ltmat33ITf_multv3_i ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03149 
03167  Gan_SquMatrix33_f *gan_ltmat33f_invert_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03168 
03177  Gan_SquMatrix33_f *gan_ltmat33f_invert_i ( Gan_SquMatrix33_f *A );
03178 
03193  float gan_ltmat33f_det_q ( const Gan_SquMatrix33_f *A );
03194 
03200  float gan_ltmat33f_trace_q ( const Gan_SquMatrix33_f *A );
03201 
03207 #undef GAN_SQUMAT_IDENT_Q
03208 #undef GAN_SQUMAT_IDENT_S
03209 #undef GAN_SQUMAT_TPOSE_Q
03210 #undef GAN_SQUMAT_TPOSE_S
03211 #undef GAN_SQUMAT_TPOSE_I
03212 #undef GAN_MAT_SADDT_Q
03213 #undef GAN_MAT_SADDT_S
03214 #undef GAN_SQUMATI_MULTV_Q
03215 #undef GAN_SQUMATI_MULTV_S
03216 #undef GAN_SQUMATI_MULTV_I
03217 #undef GAN_SQUMATIT_MULTV_Q
03218 #undef GAN_SQUMATIT_MULTV_S
03219 #undef GAN_SQUMATIT_MULTV_I
03220 #undef GAN_SQUMAT_INVERT
03221 #undef GAN_SQUMAT_INVERT_Q
03222 #undef GAN_SQUMAT_INVERT_S
03223 #undef GAN_SQUMAT_INVERT_I
03224 #undef GAN_SQUMAT_ADJOINT_Q
03225 #undef GAN_SQUMAT_ADJOINT_S
03226 #undef GAN_SQUMAT_ADJOINTT_Q
03227 #undef GAN_SQUMAT_ADJOINTT_S
03228 #undef GAN_SQUMAT_DET_Q
03229 #undef GAN_SQUMAT_DET_S
03230 #undef GAN_SQUMAT_TRACE_Q
03231 #undef GAN_SQUMAT_TRACE_S
03232 
03245 /* This library is free software; you can redistribute it and/or
03246    modify it under the terms of the GNU Lesser General Public
03247    License as published by the Free Software Foundation; either
03248    version 2.1 of the License, or (at your option) any later version.
03249 
03250    This library is distributed in the hope that it will be useful,
03251    but WITHOUT ANY WARRANTY; without even the implied warranty of
03252    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03253    Lesser General Public License for more details.
03254 
03255    You should have received a copy of the GNU Lesser General Public
03256    License along with this library; if not, write to the Free Software
03257    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03258 */
03259 
03260 /* function declarations for functions common to all small vector types */
03261 
03262 
03263 
03264 /* documentation for macros defined in individual header files */
03265 
03276  Gan_SquMatrix33_f *gan_ltmat33f_zero_q ( const Gan_SquMatrix33_f *A );
03277 
03294  Gan_SquMatrix33_f *gan_ltmat33f_copy_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03295 
03313  Gan_SquMatrix33_f *gan_ltmat33f_scale_q ( Gan_SquMatrix33_f *A, float a,
03314                                Gan_SquMatrix33_f *B );
03315 
03323  Gan_SquMatrix33_f *gan_ltmat33f_scale_i ( Gan_SquMatrix33_f *A, float a );
03324 
03333  Gan_SquMatrix33_f *gan_ltmat33f_divide_q ( Gan_SquMatrix33_f *A, float a,
03334                                 Gan_SquMatrix33_f *B );
03335 
03343  Gan_SquMatrix33_f *gan_ltmat33f_divide_i ( Gan_SquMatrix33_f *A, float a );
03344 
03352  Gan_SquMatrix33_f *gan_ltmat33f_negate_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03353 
03361  Gan_SquMatrix33_f *gan_ltmat33f_negate_i ( Gan_SquMatrix33_f *A );
03362 
03370  Gan_SquMatrix33_f *gan_ltmat33f_unit_i ( Gan_SquMatrix33_f *A );
03371 
03389  Gan_SquMatrix33_f *gan_ltmat33f_add_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
03390 
03399  Gan_SquMatrix33_f *gan_ltmat33f_add_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03400 
03409  Gan_SquMatrix33_f *gan_ltmat33f_add_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03410 
03419  Gan_SquMatrix33_f *gan_ltmat33f_increment ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03420 
03438  Gan_SquMatrix33_f *gan_ltmat33f_sub_q ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B, Gan_SquMatrix33_f *C );
03439 
03448  Gan_SquMatrix33_f *gan_ltmat33f_sub_i1 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03449 
03458  Gan_SquMatrix33_f *gan_ltmat33f_sub_i2 ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03459 
03468  Gan_SquMatrix33_f *gan_ltmat33f_decrement ( Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03469 
03488  Gan_Vector3_f *gan_ltmat33f_multv3_q ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03489                                 Gan_Vector3_f *q );
03490 
03499  Gan_Vector3_f *gan_ltmat33f_multv3_i ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03500 
03509  Gan_Vector3_f *gan_ltmat33Tf_multv3_q ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p,
03510                                  Gan_Vector3_f *q );
03511 
03520  Gan_Vector3_f *gan_ltmat33Tf_multv3_i ( const Gan_SquMatrix33_f *A, Gan_Vector3_f *p );
03521 
03583  Gan_SquMatrix33_f *gan_ltmat33f_slmultT_q ( Gan_SquMatrix33_f *A, const Gan_SquMatrix33_f *B );
03584 
03594  Gan_SquMatrix33_f *gan_ltmat33f_slmultT_i ( Gan_SquMatrix33_f *A );
03595 
03604  Gan_SquMatrix33_f *gan_ltmat33f_srmultT_q ( const Gan_SquMatrix33_f *A, Gan_SquMatrix33_f *B );
03605 
03615  Gan_SquMatrix33_f *gan_ltmat33f_srmultT_i ( Gan_SquMatrix33_f *A );
03616 
03631  float gan_ltmat33f_sumsqr_q ( const Gan_SquMatrix33_f *A );
03632 
03639  float gan_ltmat33f_Fnorm_q ( const Gan_SquMatrix33_f *A );
03640 
03671 /* This library is free software; you can redistribute it and/or
03672    modify it under the terms of the GNU Lesser General Public
03673    License as published by the Free Software Foundation; either
03674    version 2.1 of the License, or (at your option) any later version.
03675 
03676    This library is distributed in the hope that it will be useful,
03677    but WITHOUT ANY WARRANTY; without even the implied warranty of
03678    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03679    Lesser General Public License for more details.
03680 
03681    You should have received a copy of the GNU Lesser General Public
03682    License along with this library; if not, write to the Free Software
03683    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03684 */
03685 
03686 #undef GAN_MATTYPE
03687 #undef GAN_MATRIX_TYPE
03688 #undef GAN_SQUMATRIX_TYPE
03689 #undef GAN_VECTOR_TYPE
03690 #undef GAN_MAT_ELEMENT_TYPE
03691 #undef GAN_REALTYPE
03692 #undef GAN_FWRITE_LENDIAN
03693 #undef GAN_FREAD_LENDIAN
03694 #undef GAN_VECTYPE1
03695 #undef GAN_VECTYPE2
03696 #undef GAN_MATTYPEL
03697 #undef GAN_MATTYPER
03698 #undef GAN_SQUMATTYPEL
03699 #undef GAN_SQUMATTYPER
03700 #undef GAN_FIXED_MATRIX_TYPE
03701 #undef GAN_MAT_FPRINT
03702 #undef GAN_MAT_PRINT
03703 #undef GAN_MAT_FSCANF
03704 #undef GAN_MAT_FWRITE
03705 #undef GAN_MAT_FREAD
03706 #undef GAN_MAT_ZERO_Q
03707 #undef GAN_MAT_ZERO_S
03708 #undef GAN_MAT_COPY_Q
03709 #undef GAN_MAT_COPY_S
03710 #undef GAN_MAT_SCALE_Q
03711 #undef GAN_MAT_SCALE_S
03712 #undef GAN_MAT_SCALE_I
03713 #undef GAN_MAT_DIVIDE_Q
03714 #undef GAN_MAT_DIVIDE_S
03715 #undef GAN_MAT_DIVIDE_I
03716 #undef GAN_MAT_NEGATE_Q
03717 #undef GAN_MAT_NEGATE_S
03718 #undef GAN_MAT_NEGATE_I
03719 #undef GAN_MAT_UNIT_Q
03720 #undef GAN_MAT_UNIT_S
03721 #undef GAN_MAT_UNIT_I
03722 #undef GAN_MAT_ADD_Q
03723 #undef GAN_MAT_ADD_I1
03724 #undef GAN_MAT_ADD_I2
03725 #undef GAN_MAT_INCREMENT
03726 #undef GAN_MAT_ADD_S
03727 #undef GAN_MAT_SUB_Q
03728 #undef GAN_MAT_SUB_I1
03729 #undef GAN_MAT_SUB_I2
03730 #undef GAN_MAT_DECREMENT
03731 #undef GAN_MAT_SUB_S
03732 #undef GAN_VEC_OUTER_Q
03733 #undef GAN_VEC_OUTER_S
03734 #undef GAN_MAT_MULTV_Q
03735 #undef GAN_MAT_MULTV_S
03736 #undef GAN_MAT_MULTV_I
03737 #undef GAN_MATT_MULTV_Q
03738 #undef GAN_MATT_MULTV_S
03739 #undef GAN_MATT_MULTV_I
03740 #undef GAN_MAT_LMULTM_Q
03741 #undef GAN_MAT_LMULTM_S
03742 #undef GAN_MAT_LMULTMT_Q
03743 #undef GAN_MAT_LMULTMT_S
03744 #undef GAN_MAT_RMULTM_Q
03745 #undef GAN_MAT_RMULTM_S
03746 #undef GAN_MAT_RMULTMT_Q
03747 #undef GAN_MAT_RMULTMT_S
03748 #undef GAN_MAT_LMULTMT_SYM_Q
03749 #undef GAN_MAT_LMULTMT_SYM_S
03750 #undef GAN_MAT_RMULTMT_SYM_Q
03751 #undef GAN_MAT_RMULTMT_SYM_S
03752 #undef GAN_MAT_LMULTS_Q
03753 #undef GAN_MAT_LMULTS_S
03754 #undef GAN_MAT_RMULTS_Q
03755 #undef GAN_MAT_RMULTS_S
03756 #undef GAN_SYMMATL_LRMULT_Q
03757 #undef GAN_SYMMATL_LRMULT_S
03758 #undef GAN_SYMMATR_LRMULT_Q
03759 #undef GAN_SYMMATR_LRMULT_S
03760 #undef GAN_MAT_LMULTL_Q
03761 #undef GAN_MAT_LMULTL_S
03762 #undef GAN_MAT_LMULTL_I
03763 #undef GAN_MAT_LMULTLI_Q
03764 #undef GAN_MAT_LMULTLI_S
03765 #undef GAN_MAT_LMULTLI_I
03766 #undef GAN_MAT_LMULTLT_Q
03767 #undef GAN_MAT_LMULTLT_S
03768 #undef GAN_MAT_LMULTLT_I
03769 #undef GAN_MAT_LMULTLIT_Q
03770 #undef GAN_MAT_LMULTLIT_S
03771 #undef GAN_MAT_LMULTLIT_I
03772 #undef GAN_MAT_RMULTL_Q
03773 #undef GAN_MAT_RMULTL_S
03774 #undef GAN_MAT_RMULTL_I
03775 #undef GAN_MAT_RMULTLI_Q
03776 #undef GAN_MAT_RMULTLI_S
03777 #undef GAN_MAT_RMULTLI_I
03778 #undef GAN_MAT_RMULTLT_Q
03779 #undef GAN_MAT_RMULTLT_S
03780 #undef GAN_MAT_RMULTLT_I
03781 #undef GAN_MAT_RMULTLIT_Q
03782 #undef GAN_MAT_RMULTLIT_S
03783 #undef GAN_MAT_RMULTLIT_I
03784 #undef GAN_MAT_SRMULTT_Q
03785 #undef GAN_MAT_SRMULTT_S
03786 #undef GAN_MAT_SRMULTT_I
03787 #undef GAN_MAT_SLMULTT_Q
03788 #undef GAN_MAT_SLMULTT_S
03789 #undef GAN_MAT_SLMULTT_I
03790 #undef GAN_MAT_RMULTLIT_S
03791 #undef GAN_MAT_SUMSQR_Q
03792 #undef GAN_MAT_SUMSQR_S
03793 #undef GAN_MAT_FNORM_Q
03794 #undef GAN_MAT_FNORM_S
03795 #undef GAN_MAT_FROM_MAT_Q
03796 #undef GAN_MAT_FROM_MAT_S
03797 #undef GAN_MAT_FROM_SQUMAT_Q
03798 #undef GAN_MAT_FROM_SQUMAT_S
03799 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03800 #undef GAN_SQUMAT_FROM_SQUMAT_S
03801 
03802 /* declare functions specific to upper triangular 3x3 matrices */
03816 #define GAN_MATTYPE Gan_SquMatrix33_f
03817 #define GAN_MATRIX_TYPE Gan_SquMatrix_f
03818 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix_f
03819 #define GAN_VECTOR_TYPE Gan_Vector_f
03820 #define GAN_MAT_ELEMENT_TYPE GAN_FLOAT
03821 #define GAN_REALTYPE float
03822 #define GAN_MAT_FPRINT   gan_ltmat33Tf_fprint
03823 #define GAN_MAT_PRINT    gan_ltmat33Tf_print
03824 #define GAN_MAT_FSCANF   gan_ltmat33Tf_fscanf
03825 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33_F
03826 
03827 #define gan_ltmat33Tf_fwrite gan_ltmat33f_fwrite
03828 #define gan_ltmat33Tf_fread  gan_ltmat33f_fread
03829 
03842 /* This library is free software; you can redistribute it and/or
03843    modify it under the terms of the GNU Lesser General Public
03844    License as published by the Free Software Foundation; either
03845    version 2.1 of the License, or (at your option) any later version.
03846 
03847    This library is distributed in the hope that it will be useful,
03848    but WITHOUT ANY WARRANTY; without even the implied warranty of
03849    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03850    Lesser General Public License for more details.
03851 
03852    You should have received a copy of the GNU Lesser General Public
03853    License along with this library; if not, write to the Free Software
03854    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03855 */
03856 
03857 /* function declarations for functions common to all small square matrix
03858  * types */
03859 
03860 
03861 
03862 /* documentation for macros defined in individual header files */
03863 
03930 #undef GAN_SQUMAT_IDENT_Q
03931 #undef GAN_SQUMAT_IDENT_S
03932 #undef GAN_SQUMAT_TPOSE_Q
03933 #undef GAN_SQUMAT_TPOSE_S
03934 #undef GAN_SQUMAT_TPOSE_I
03935 #undef GAN_MAT_SADDT_Q
03936 #undef GAN_MAT_SADDT_S
03937 #undef GAN_SQUMATI_MULTV_Q
03938 #undef GAN_SQUMATI_MULTV_S
03939 #undef GAN_SQUMATI_MULTV_I
03940 #undef GAN_SQUMATIT_MULTV_Q
03941 #undef GAN_SQUMATIT_MULTV_S
03942 #undef GAN_SQUMATIT_MULTV_I
03943 #undef GAN_SQUMAT_INVERT
03944 #undef GAN_SQUMAT_INVERT_Q
03945 #undef GAN_SQUMAT_INVERT_S
03946 #undef GAN_SQUMAT_INVERT_I
03947 #undef GAN_SQUMAT_ADJOINT_Q
03948 #undef GAN_SQUMAT_ADJOINT_S
03949 #undef GAN_SQUMAT_ADJOINTT_Q
03950 #undef GAN_SQUMAT_ADJOINTT_S
03951 #undef GAN_SQUMAT_DET_Q
03952 #undef GAN_SQUMAT_DET_S
03953 #undef GAN_SQUMAT_TRACE_Q
03954 #undef GAN_SQUMAT_TRACE_S
03955 
03968 /* This library is free software; you can redistribute it and/or
03969    modify it under the terms of the GNU Lesser General Public
03970    License as published by the Free Software Foundation; either
03971    version 2.1 of the License, or (at your option) any later version.
03972 
03973    This library is distributed in the hope that it will be useful,
03974    but WITHOUT ANY WARRANTY; without even the implied warranty of
03975    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03976    Lesser General Public License for more details.
03977 
03978    You should have received a copy of the GNU Lesser General Public
03979    License along with this library; if not, write to the Free Software
03980    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03981 */
03982 
03983 /* function declarations for functions common to all small vector types */
03984 
03985 
03986 
03987 /* documentation for macros defined in individual header files */
03988 
04159 /* This library is free software; you can redistribute it and/or
04160    modify it under the terms of the GNU Lesser General Public
04161    License as published by the Free Software Foundation; either
04162    version 2.1 of the License, or (at your option) any later version.
04163 
04164    This library is distributed in the hope that it will be useful,
04165    but WITHOUT ANY WARRANTY; without even the implied warranty of
04166    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04167    Lesser General Public License for more details.
04168 
04169    You should have received a copy of the GNU Lesser General Public
04170    License along with this library; if not, write to the Free Software
04171    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04172 */
04173 
04174 #undef GAN_MATTYPE
04175 #undef GAN_MATRIX_TYPE
04176 #undef GAN_SQUMATRIX_TYPE
04177 #undef GAN_VECTOR_TYPE
04178 #undef GAN_MAT_ELEMENT_TYPE
04179 #undef GAN_REALTYPE
04180 #undef GAN_FWRITE_LENDIAN
04181 #undef GAN_FREAD_LENDIAN
04182 #undef GAN_VECTYPE1
04183 #undef GAN_VECTYPE2
04184 #undef GAN_MATTYPEL
04185 #undef GAN_MATTYPER
04186 #undef GAN_SQUMATTYPEL
04187 #undef GAN_SQUMATTYPER
04188 #undef GAN_FIXED_MATRIX_TYPE
04189 #undef GAN_MAT_FPRINT
04190 #undef GAN_MAT_PRINT
04191 #undef GAN_MAT_FSCANF
04192 #undef GAN_MAT_FWRITE
04193 #undef GAN_MAT_FREAD
04194 #undef GAN_MAT_ZERO_Q
04195 #undef GAN_MAT_ZERO_S
04196 #undef GAN_MAT_COPY_Q
04197 #undef GAN_MAT_COPY_S
04198 #undef GAN_MAT_SCALE_Q
04199 #undef GAN_MAT_SCALE_S
04200 #undef GAN_MAT_SCALE_I
04201 #undef GAN_MAT_DIVIDE_Q
04202 #undef GAN_MAT_DIVIDE_S
04203 #undef GAN_MAT_DIVIDE_I
04204 #undef GAN_MAT_NEGATE_Q
04205 #undef GAN_MAT_NEGATE_S
04206 #undef GAN_MAT_NEGATE_I
04207 #undef GAN_MAT_UNIT_Q
04208 #undef GAN_MAT_UNIT_S
04209 #undef GAN_MAT_UNIT_I
04210 #undef GAN_MAT_ADD_Q
04211 #undef GAN_MAT_ADD_I1
04212 #undef GAN_MAT_ADD_I2
04213 #undef GAN_MAT_INCREMENT
04214 #undef GAN_MAT_ADD_S
04215 #undef GAN_MAT_SUB_Q
04216 #undef GAN_MAT_SUB_I1
04217 #undef GAN_MAT_SUB_I2
04218 #undef GAN_MAT_DECREMENT
04219 #undef GAN_MAT_SUB_S
04220 #undef GAN_VEC_OUTER_Q
04221 #undef GAN_VEC_OUTER_S
04222 #undef GAN_MAT_MULTV_Q
04223 #undef GAN_MAT_MULTV_S
04224 #undef GAN_MAT_MULTV_I
04225 #undef GAN_MATT_MULTV_Q
04226 #undef GAN_MATT_MULTV_S
04227 #undef GAN_MATT_MULTV_I
04228 #undef GAN_MAT_LMULTM_Q
04229 #undef GAN_MAT_LMULTM_S
04230 #undef GAN_MAT_LMULTMT_Q
04231 #undef GAN_MAT_LMULTMT_S
04232 #undef GAN_MAT_RMULTM_Q
04233 #undef GAN_MAT_RMULTM_S
04234 #undef GAN_MAT_RMULTMT_Q
04235 #undef GAN_MAT_RMULTMT_S
04236 #undef GAN_MAT_LMULTMT_SYM_Q
04237 #undef GAN_MAT_LMULTMT_SYM_S
04238 #undef GAN_MAT_RMULTMT_SYM_Q
04239 #undef GAN_MAT_RMULTMT_SYM_S
04240 #undef GAN_MAT_LMULTS_Q
04241 #undef GAN_MAT_LMULTS_S
04242 #undef GAN_MAT_RMULTS_Q
04243 #undef GAN_MAT_RMULTS_S
04244 #undef GAN_SYMMATL_LRMULT_Q
04245 #undef GAN_SYMMATL_LRMULT_S
04246 #undef GAN_SYMMATR_LRMULT_Q
04247 #undef GAN_SYMMATR_LRMULT_S
04248 #undef GAN_MAT_LMULTL_Q
04249 #undef GAN_MAT_LMULTL_S
04250 #undef GAN_MAT_LMULTL_I
04251 #undef GAN_MAT_LMULTLI_Q
04252 #undef GAN_MAT_LMULTLI_S
04253 #undef GAN_MAT_LMULTLI_I
04254 #undef GAN_MAT_LMULTLT_Q
04255 #undef GAN_MAT_LMULTLT_S
04256 #undef GAN_MAT_LMULTLT_I
04257 #undef GAN_MAT_LMULTLIT_Q
04258 #undef GAN_MAT_LMULTLIT_S
04259 #undef GAN_MAT_LMULTLIT_I
04260 #undef GAN_MAT_RMULTL_Q
04261 #undef GAN_MAT_RMULTL_S
04262 #undef GAN_MAT_RMULTL_I
04263 #undef GAN_MAT_RMULTLI_Q
04264 #undef GAN_MAT_RMULTLI_S
04265 #undef GAN_MAT_RMULTLI_I
04266 #undef GAN_MAT_RMULTLT_Q
04267 #undef GAN_MAT_RMULTLT_S
04268 #undef GAN_MAT_RMULTLT_I
04269 #undef GAN_MAT_RMULTLIT_Q
04270 #undef GAN_MAT_RMULTLIT_S
04271 #undef GAN_MAT_RMULTLIT_I
04272 #undef GAN_MAT_SRMULTT_Q
04273 #undef GAN_MAT_SRMULTT_S
04274 #undef GAN_MAT_SRMULTT_I
04275 #undef GAN_MAT_SLMULTT_Q
04276 #undef GAN_MAT_SLMULTT_S
04277 #undef GAN_MAT_SLMULTT_I
04278 #undef GAN_MAT_RMULTLIT_S
04279 #undef GAN_MAT_SUMSQR_Q
04280 #undef GAN_MAT_SUMSQR_S
04281 #undef GAN_MAT_FNORM_Q
04282 #undef GAN_MAT_FNORM_S
04283 #undef GAN_MAT_FROM_MAT_Q
04284 #undef GAN_MAT_FROM_MAT_S
04285 #undef GAN_MAT_FROM_SQUMAT_Q
04286 #undef GAN_MAT_FROM_SQUMAT_S
04287 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04288 #undef GAN_SQUMAT_FROM_SQUMAT_S
04289 
04302 #ifdef __cplusplus
04303 }
04304 #endif
04305 
04306 #endif /* #ifndef _GAN_3X3MATRIXF_H */

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