From 0530e66c80790649d8620747a2d3ae1ef308f8b9 Mon Sep 17 00:00:00 2001 From: Saad Jbabdi <saad@fmrib.ox.ac.uk> Date: Wed, 14 Jun 2006 17:30:31 +0000 Subject: [PATCH] SJ changes for Cfdt --- miscmaths.cc | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/miscmaths.cc b/miscmaths.cc index 3650d61..9649634 100644 --- a/miscmaths.cc +++ b/miscmaths.cc @@ -1109,7 +1109,12 @@ float median(const ColumnVector& x) return m; } - +void sph2cart(const ColumnVector& dir, float& th, float& ph) +{ + dir(1) = cos(ph) * sin(th); + dir(2) = sin(ph) * sin(th); + dir(3) = cos(th); +} void cart2sph(const ColumnVector& dir, float& th, float& ph) @@ -1166,6 +1171,45 @@ void cart2sph(const Matrix& dir,ColumnVector& th,ColumnVector& ph) } } +// added by SJ +void cart2sph(const vector<ColumnVector>& dir,ColumnVector& th,ColumnVector& ph) +{ + if(th.Nrows()!=dir.size()){ + th.ReSize(dir.size()); + } + + if(ph.Nrows()!=dir.size()){ + ph.ReSize(dir.size()); + } + //double _2pi=2*M_PI; + double _pi2=M_PI/2; + + int j=1; + for (unsigned int i=0;i<dir.size();i++) { + float mag=std::sqrt(dir[i](1)*dir[i](1)+dir[i](2)*dir[i](2)+dir[i](3)*dir[i](3)); + if(mag==0){ + ph(j)=_pi2; + th(j)=_pi2; + } + else{ + if(dir[i](1)==0 && dir[i](2)>=0) ph(j)=_pi2; + else if(dir[i](1)==0 && dir[i](2)<0) ph(j)=-_pi2; + else if(dir[i](1)>0) ph(j)=std::atan(dir[i](2)/dir[i](1)); + else if(dir[i](2)>0) ph(j)=std::atan(dir[i](2)/dir[i](1))+M_PI; + else ph(j)=std::atan(dir[i](2)/dir[i](1))-M_PI; + + //ph(j)=fmod(ph(j),_2pi); + + if(dir[i](3)==0) th(j)=_pi2; + else if(dir[i](3)>0) th(j)=std::atan(std::sqrt(dir[i](1)*dir[i](1)+dir[i](2)*dir[i](2))/dir[i](3)); + else th(j)=std::atan(std::sqrt(dir[i](1)*dir[i](1)+dir[i](2)*dir[i](2))/dir[i](3))+M_PI; + + //th(j)=fmod(th(j),M_PI); + + } + j++; + } +} // Added by CFB --- Matlab style Matrix functions -- GitLab