39 #include <visp3/core/vpCylinder.h>
40 #include <visp3/core/vpFeatureDisplay.h>
88 const double X0,
const double Y0,
146 const double X0,
const double Y0,
223 double co, si, e, x0, y0, z0;
224 double A,B,C, X0, Y0, Z0, R ;
225 double s, a, b, c, zero;
234 zero = A*X0 + B*Y0 + C*Z0;
236 s = X0*X0 + Y0*Y0 + Z0*Z0 - R*R - zero*zero;
239 printf(
"The camera is inside the cylinder with s=%f !\n", s);
253 e = sqrt(co*co + si*si);
254 p_[0] = -(R*c*s-z0)/e ;
255 p_[1] = atan2(si,co) ;
263 e = sqrt(co*co + si*si);
264 p_[2] = -( R*c*s+z0 )/e ;
265 p_[3] = atan2( si,co ) ;
304 double oA,oB,oC, oX0, oY0, oZ0 ;
312 X1 = cMo[0][0]*oA + cMo[0][1]*oB + cMo[0][2]*oC ;
313 Y1 = cMo[1][0]*oA + cMo[1][1]*oB + cMo[1][2]*oC ;
314 Z1 = cMo[2][0]*oA + cMo[2][1]*oB + cMo[2][2]*oC ;
315 s = sqrt ( X1*X1 + Y1*Y1 + Z1*Z1 );
325 X2 = cMo[0][3] + cMo[0][0]*oX0 + cMo[0][1]*oY0 + cMo[0][2]*oZ0;
326 Y2 = cMo[1][3] + cMo[1][0]*oX0 + cMo[1][1]*oY0 + cMo[1][2]*oZ0;
327 Z2 = cMo[2][3] + cMo[2][0]*oX0 + cMo[2][1]*oY0 + cMo[2][2]*oZ0;
331 cP_[3] = (1-a*a)*X2 - a*b*Y2 - a*c*Z2;
332 cP_[4] = -a*b*X2 + (1-b*b)*Y2 - b*c*Z2;
333 cP_[5] = -a*c*X2 - b*c*Y2 + (1-c*c)*Z2;
403 const unsigned int thickness)
410 cam, I, color, thickness) ;
421 const unsigned int thickness)
424 cam, I, color, thickness) ;
vpCylinder * duplicate() const
for memory issue (used by the vpServo class only)
Implementation of an homogeneous matrix and operations on such kind of matrices.
static void displayCylinder(double rho1, double theta1, double rho2, double theta2, const vpCameraParameters &cam, const vpImage< unsigned char > &I, const vpColor &color=vpColor::green, unsigned int thickness=1)
Class to define colors available for display functionnalities.
error that can be emited by ViSP classes.
void changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
Generic class defining intrinsic camera parameters.
Class that defines what is a cylinder.
Implementation of column vector and the associated operations.
void display(const vpImage< unsigned char > &I, const vpCameraParameters &cam, const vpColor &color=vpColor::green, const unsigned int thickness=1)
void setWorldCoordinates(const vpColVector &oP)
void resize(const unsigned int i, const bool flagNullify=true)