Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpThetaUVector.h
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2025 by Inria. All rights reserved.
4 *
5 * This software is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 * See the file LICENSE.txt at the root directory of this source
10 * distribution for additional information about the GNU GPL.
11 *
12 * For using ViSP with software that can not be combined with the GNU
13 * GPL, please contact Inria about acquiring a ViSP Professional
14 * Edition License.
15 *
16 * See https://visp.inria.fr for more information.
17 *
18 * This software was developed at:
19 * Inria Rennes - Bretagne Atlantique
20 * Campus Universitaire de Beaulieu
21 * 35042 Rennes Cedex
22 * France
23 *
24 * If you have questions regarding the use of this file, please contact
25 * Inria at visp@inria.fr
26 *
27 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29 *
30 * Description:
31 * Theta U parameterization for the rotation.
32 */
33
39
40#ifndef VP_THETAU_VECTOR_H
41#define VP_THETAU_VECTOR_H
42
43#include <visp3/core/vpColVector.h>
44#include <visp3/core/vpHomogeneousMatrix.h>
45#include <visp3/core/vpQuaternionVector.h>
46#include <visp3/core/vpRotationMatrix.h>
47#include <visp3/core/vpRotationVector.h>
48#include <visp3/core/vpRxyzVector.h>
49#include <visp3/core/vpRzyxVector.h>
50
52
55class vpPoseVector;
56class vpRzyxVector;
57class vpRxyzVector;
58class vpRzyzVector;
59class vpColVector;
62
171class VISP_EXPORT vpThetaUVector : public vpRotationVector
172{
173public:
175#if (VISP_CXX_STANDARD > VISP_CXX_STANDARD_98)
177 virtual ~vpThetaUVector() VP_OVERRIDE = default;
178#else
179 virtual ~vpThetaUVector() { }
180#endif
181 // constructor initialize a Theta U vector from a homogeneous matrix
182 VP_EXPLICIT vpThetaUVector(const vpHomogeneousMatrix &M);
183 // constructor initialize a Theta U vector from a pose vector
184 VP_EXPLICIT vpThetaUVector(const vpPoseVector &p);
185 // constructor initialize a Theta U vector from a rotation matrix
186 VP_EXPLICIT vpThetaUVector(const vpRotationMatrix &R);
187 // constructor initialize a Theta U vector from a RzyxVector
188 VP_EXPLICIT vpThetaUVector(const vpRzyxVector &rzyx);
189 // constructor initialize a Theta U vector from a RzyzVector
190 VP_EXPLICIT vpThetaUVector(const vpRzyzVector &rzyz);
191 // constructor initialize a Theta U vector from a RxyzVector
192 VP_EXPLICIT vpThetaUVector(const vpRxyzVector &rxyz);
193 VP_EXPLICIT vpThetaUVector(const vpQuaternionVector &q);
194 VP_EXPLICIT vpThetaUVector(const vpColVector &tu);
195 VP_EXPLICIT vpThetaUVector(const std::vector<double> &tu);
196
197 vpThetaUVector(double tux, double tuy, double tuz);
198
199 // convert an homogeneous matrix into Theta U vector
200 vpThetaUVector &buildFrom(const vpHomogeneousMatrix &M);
201 // convert a pose vector into Theta U vector
202 vpThetaUVector &buildFrom(const vpPoseVector &p);
203 // convert a rotation matrix into Theta U vector
204 vpThetaUVector &buildFrom(const vpRotationMatrix &R);
205 // convert an Rzyx vector into Theta U vector
206 vpThetaUVector &buildFrom(const vpRzyxVector &rzyx);
207 // convert an Rzyz vector into Theta U vector
208 vpThetaUVector &buildFrom(const vpRzyzVector &zyz);
209 // convert an Rxyz vector into Theta U vector
210 vpThetaUVector &buildFrom(const vpRxyzVector &xyz);
211 vpThetaUVector &buildFrom(const vpQuaternionVector &q);
212 vpThetaUVector &buildFrom(const vpColVector &tu);
213 vpThetaUVector &buildFrom(const std::vector<double> &tu);
214
215 vpThetaUVector &buildFrom(const double &tux, const double &tuy, const double &tuz);
216
217 // extract the angle and the axis from the ThetaU representation
218 void extract(double &theta, vpColVector &u) const;
219 double getTheta() const;
220 vpColVector getU() const;
221
223 vpThetaUVector &operator=(double x);
224 vpThetaUVector operator*(const vpThetaUVector &tu_b) const;
225
226#if (VISP_CXX_STANDARD > VISP_CXX_STANDARD_98)
228#endif
229
230#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
231 vpThetaUVector &operator=(const std::initializer_list<double> &list);
232#endif
233
234private:
235 static const double minimum;
236 static const unsigned int constr_val_3;
237
238};
239END_VISP_NAMESPACE
240#endif
Implementation of column vector and the associated operations.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Implementation of a pose vector and operations on poses.
Implementation of a rotation vector as quaternion angle minimal representation.
Implementation of a rotation matrix and operations on such kind of matrices.
Implementation of a generic rotation vector.
vpRotationVector & operator=(const vpRotationVector &v)
vpRotationVector()
Constructor that constructs a 0-size rotation vector.
vpColVector operator*(double x) const
Implementation of a rotation vector as Euler angle minimal representation.
Implementation of a rotation vector as Euler angle minimal representation.
Implementation of a rotation vector as Euler angle minimal representation.
Implementation of a rotation vector as axis-angle minimal representation.
virtual ~vpThetaUVector() VP_OVERRIDE=default
vpThetaUVector(const vpThetaUVector &)=default
vpThetaUVector & operator=(const vpThetaUVector &)=default