1 /***************************************************************************** 2 Major portions of this software are copyrighted by the Medical College 3 of Wisconsin, 1994-2000, and are released under the Gnu General Public 4 License, Version 2. See the file README.Copyright for details. 5 ******************************************************************************/ 6 7 #ifndef _THD_SHEAR3D_HEADER_ 8 #define _THD_SHEAR3D_HEADER_ 9 10 #include "vecmat.h" 11 12 #include <stdio.h> 13 #include <stdlib.h> 14 #include "mrilib.h" 15 16 #undef DB 17 #define DB fprintf(stderr,"in %s at line %d\n",__FILE__,__LINE__) 18 19 /*------------------------------------------------------------------------ 20 Struct to contain a set of 4 3-shears, used to represent an arbitrary 21 transformation; for i=0..3: 22 3-shear #i is along axis # ax[i] (0=x, 1=y, 2=z), 23 with scaling parameter scl[i][j] for direction j (j=0,1,2), 24 and shift parameter sft[i] (of course in the ax[i] direction). 25 In addition, a preliminary flipping about two axes may be present. 26 These axes are denoted by flip0 and flip1, if flip0 >= 0. 27 --------------------------------------------------------------------------*/ 28 29 typedef struct { 30 int ax[4] , flip0,flip1; 31 double scl[4][3] , sft[4] ; 32 } MCW_3shear ; 33 34 #define DUMP_3SHEAR(str,sss) \ 35 fprintf(stderr,"shear %s: flip0=%d flip1=%d\n" \ 36 " #0: ax=%d scl=%13.6g %13.6g %13.6g sft=%13.6g\n" \ 37 " #1: ax=%d scl=%13.6g %13.6g %13.6g sft=%13.6g\n" \ 38 " #2: ax=%d scl=%13.6g %13.6g %13.6g sft=%13.6g\n" \ 39 " #3: ax=%d scl=%13.6g %13.6g %13.6g sft=%13.6g\n" , \ 40 str , (sss).flip0 , (sss).flip1 , \ 41 (sss).ax[0], (sss).scl[0][0], (sss).scl[0][1], (sss).scl[0][2], (sss).sft[0], \ 42 (sss).ax[1], (sss).scl[1][0], (sss).scl[1][1], (sss).scl[1][2], (sss).sft[1], \ 43 (sss).ax[2], (sss).scl[2][0], (sss).scl[2][1], (sss).scl[2][2], (sss).sft[2], \ 44 (sss).ax[3], (sss).scl[3][0], (sss).scl[3][1], (sss).scl[3][2], (sss).sft[3] ) 45 46 #define ISVALID_3SHEAR(sss) ((sss).ax[0] >= 0) 47 #define INVALIDATE_3SHEAR(sss) ((sss).ax[0] = -1) 48 49 /*-------- Prototypes -------------*/ 50 51 extern double norm_3shear( MCW_3shear sh ) ; 52 extern THD_dmat33 make_shear_matrix( int ax , double scl[3] ) ; 53 extern MCW_3shear permute_3shear( MCW_3shear shin , int ox1, int ox2, int ox3 ) ; 54 extern THD_dmat33 permute_dmat33( THD_dmat33 q , int ox1, int ox2, int ox3 ) ; 55 extern THD_dfvec3 permute_dfvec3( THD_dfvec3 q , int ox1, int ox2, int ox3 ) ; 56 extern MCW_3shear shear_xzyx( THD_dmat33 *q , THD_dfvec3 *xyzdel ) ; 57 extern MCW_3shear shear_arb( THD_dmat33 *q , THD_dfvec3 *xyzdel , int ox1,int ox2,int ox3 ) ; 58 extern MCW_3shear shear_best( THD_dmat33 * q , THD_dfvec3 * xyzdel ) ; 59 extern THD_dmat33 rot_to_matrix( int ax1 , double th1 , 60 int ax2 , double th2 , int ax3 , double th3 ) ; 61 extern MCW_3shear rot_to_shear( int ax1 , double th1 , 62 int ax2 , double th2 , 63 int ax3 , double th3 , 64 int dcode , double dx , double dy , double dz , 65 double xdel , double ydel , double zdel ) ; 66 extern MCW_3shear rot_to_shear_matvec( THD_dmat33 rmat , THD_dfvec3 tvec , 67 double xdel , double ydel , double zdel ) ; 68 extern THD_dmat33 DMAT_xt_x( THD_dmat33 inmat ) ; 69 extern THD_dmat33 DMAT_x_xt( THD_dmat33 inmat ) ; /* 09 Apr 2003 */ 70 extern THD_dvecmat DMAT_symeig( THD_dmat33 inmat ) ; 71 extern THD_dmat33 DMAT_pow( THD_dmat33 inmat , double pp ) ; 72 extern THD_dmat33 DMAT_svdrot_old( THD_dmat33 inmat ) ; 73 extern THD_dmat33 DMAT_svdrot_new( THD_dmat33 inmat ) ; /* 09 Apr 2003 */ 74 extern THD_dmat33 DMAT_svdrot_newer( THD_dmat33 inmat ) ; /* 22 Oct 2004 */ 75 extern THD_dvecmat DLSQ_rot_trans( int n, THD_dfvec3 * xx, THD_dfvec3 * yy, double * ww ) ; 76 77 #endif /* _THD_SHEAR3D_HEADER_ */ 78