47 #include <visp/vpConfig.h> 
   48 #include <visp/vpMath.h> 
   50 #if VISP_VERSION_INT <= (2<<16 | 6<<8 | 1) 
   65                                        const double z,
const double w) 
 
   88   for(
unsigned int i=0;i<
size();i++) (*
this)[i]=q.
r[i];   
 
   99                              const double z,
const double w) 
 
  146                             w() * rq.
y() + 
y() * rq.
w() + 
z() * rq.
x() - 
x() * rq.
z(),
 
  147                             w() * rq.
z() + 
z() * rq.
w() + 
x() * rq.
y() - 
y() * rq.
x(),
 
  148                             w() * rq.
w() - 
x() * rq.
x() - 
y() * rq.
y() - 
z() * rq.
z());
 
  154   for(
unsigned int i=0;i<
size();i++) (*
this)[i]=q.
r[i];
 
  165   double s,c,theta,sinc;
 
  166   double axis_x,axis_y,axis_z;
 
  168   s = (R[1][0]-R[0][1])*(R[1][0]-R[0][1])
 
  169       + (R[2][0]-R[0][2])*(R[2][0]-R[0][2])
 
  170       + (R[2][1]-R[1][2])*(R[2][1]-R[1][2]);
 
  172   c = (R[0][0]+R[1][1]+R[2][2]-1.0)/2.0;
 
  176     sinc = vpMath::sinc(
s,theta);
 
  178     axis_x = (R[2][1]-R[1][2])/(2*sinc);
 
  179     axis_y = (R[0][2]-R[2][0])/(2*sinc);
 
  180     axis_z = (R[1][0]-R[0][1])/(2*sinc);
 
  182     axis_x = theta*(sqrt((R[0][0]-c)/(1-c)));
 
  183     if ((R[2][1]-R[1][2]) < 0) axis_x = -axis_x;
 
  184     axis_y = theta*(sqrt((R[1][1]-c)/(1-c)));
 
  185     if ((R[0][2]-R[2][0]) < 0) axis_y = -axis_y;
 
  186     axis_z = theta*(sqrt((R[2][2]-c)/(1-c)));
 
  187     if ((R[1][0]-R[0][1]) < 0) axis_z = -axis_z;
 
  191   double norm = sqrt(axis_x*axis_x+axis_y*axis_y+axis_z*axis_z);        
 
  192   if(fabs(norm)<
minimum) norm = 1.;
 
  193   double sinTheta_2 = sin(theta);
 
  194   set((axis_x * sinTheta_2)/norm,
 
  195       (axis_y * sinTheta_2)/norm,
 
  196       (axis_z * sinTheta_2)/norm,