1 #include "mrilib.h"
2
3 #define ERREX(str) (fprintf(stderr,"*** %s\n",str),exit(1))
4
main(int argc,char * argv[])5 int main( int argc , char * argv[] )
6 {
7 THD_mat33 mat ;
8 THD_fvec3 tran , vec ;
9 MRI_IMAGE * matim , * vecim ;
10 float * matar , * vecar ;
11 int nvec , ii ;
12 char a[32],b[32],c[32] , *s ;
13
14 if( argc < 3 || strcmp(argv[1],"-help") == 0 ){
15 printf("Usage: qrot matfile vecfile > outvecfile \n") ; exit(0) ;
16 }
17
18 matim = mri_read_ascii( argv[1] ) ;
19 if( matim == NULL ) ERREX("Can't open matfile!") ;
20 if( matim->nx != 4 || matim->ny != 3 ) ERREX("matfile not 4x3!") ;
21
22 matar = MRI_FLOAT_PTR(matim) ;
23 LOAD_MAT(mat,matar[0],matar[1],matar[2],
24 matar[4],matar[5],matar[6],
25 matar[8],matar[9],matar[10] ) ;
26 LOAD_FVEC3(tran,matar[3],matar[7],matar[11]) ;
27
28 vecim = mri_read_ascii( argv[2] ) ;
29 if( vecim == NULL ) ERREX("Can't open vecfile!") ;
30 if( vecim->nx != 3 ) ERREX("vecfile not 3xN!") ;
31
32 vecar = MRI_FLOAT_PTR(vecim) ;
33 nvec = vecim->ny ;
34 for( ii=0 ; ii < nvec ; ii++ ){
35 LOAD_FVEC3(vec,vecar[3*ii+0],vecar[3*ii+1],vecar[3*ii+2]) ;
36 vec = MATVEC(mat,vec) ;
37 vec = ADD_FVEC3(vec,tran) ;
38 s = MV_format_fval( vec.xyz[0] ) ; strcpy(a,s) ;
39 s = MV_format_fval( vec.xyz[1] ) ; strcpy(b,s) ;
40 s = MV_format_fval( vec.xyz[2] ) ; strcpy(c,s) ;
41 printf("%s %s %s\n",a,b,c) ;
42 }
43 exit(0) ;
44 }
45