Home | History | Annotate | Download | only in Geometry

Lines Matching refs:Quaternion

30   * \brief Base class for quaternion expressions
32 * \sa class Quaternion
103 /** \returns a quaternion representing an identity rotation
106 EIGEN_DEVICE_FUNC static inline Quaternion<Scalar> Identity() { return Quaternion<Scalar>(Scalar(1), Scalar(0), Scalar(0), Scalar(0)); }
112 /** \returns the squared norm of the quaternion's coefficients
117 /** \returns the norm of the quaternion's coefficients
122 /** Normalizes the quaternion \c *this
127 EIGEN_DEVICE_FUNC inline Quaternion<Scalar> normalized() const { return Quaternion<Scalar>(coeffs().normalized()); }
141 /** \returns the quaternion which transform \a a into \a b through a rotation */
145 template<class OtherDerived> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion<Scalar> operator* (const QuaternionBase<OtherDerived>& q) const;
148 /** \returns the quaternion describing the inverse rotation */
149 EIGEN_DEVICE_FUNC Quaternion<Scalar> inverse() const;
151 /** \returns the conjugated quaternion */
152 EIGEN_DEVICE_FUNC Quaternion<Scalar> conjugate() const;
154 template<class OtherDerived> EIGEN_DEVICE_FUNC Quaternion<Scalar> slerp(const Scalar& t, const QuaternionBase<OtherDerived>& other) const;
173 EIGEN_DEVICE_FUNC inline typename internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type cast() const
175 return typename internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type(derived());
184 * Definition/implementation of Quaternion<Scalar>
189 * \class Quaternion
191 * \brief The quaternion class used to represent 3D orientations and rotations
196 * This class represents a quaternion \f$ w+xi+yj+zk \f$ that is a convenient representation of
207 * \warning Operations interpreting the quaternion as rotation have undefined behavior if the quaternion is not normalized.
214 struct traits<Quaternion<_Scalar,_Options> >
216 typedef Quaternion<_Scalar,_Options> PlainObject;
227 class Quaternion : public QuaternionBase<Quaternion<_Scalar,_Options> >
230 typedef QuaternionBase<Quaternion<_Scalar,_Options> > Base;
231 enum { NeedsAlignment = internal::traits<Quaternion>::Alignment>0 };
235 EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Quaternion)
238 typedef typename internal::traits<Quaternion>::Coefficients Coefficients;
241 /** Default constructor leaving the quaternion uninitialized. */
242 EIGEN_DEVICE_FUNC inline Quaternion() {}
244 /** Constructs and initializes the quaternion \f$ w+xi+yj+zk \f$ from
251 EIGEN_DEVICE_FUNC inline Quaternion(const Scalar& w, const Scalar& x, const Scalar& y, const Scalar& z) : m_coeffs(x, y, z, w){}
253 /** Constructs and initialize a quaternion from the array data */
254 EIGEN_DEVICE_FUNC explicit inline Quaternion(const Scalar* data) : m_coeffs(data) {}
257 template<class Derived> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion(const QuaternionBase<Derived>& other) { this->Base::operator=(other); }
259 /** Constructs and initializes a quaternion from the angle-axis \a aa */
260 EIGEN_DEVICE_FUNC explicit inline Quaternion(const AngleAxisType& aa) { *this = aa; }
262 /** Constructs and initializes a quaternion from either:
264 * - a 4D vector expression representing quaternion coefficients.
267 EIGEN_DEVICE_FUNC explicit inline Quaternion(const MatrixBase<Derived>& other) { *this = other; }
271 EIGEN_DEVICE_FUNC explicit inline Quaternion(const Quaternion<OtherScalar, OtherOptions>& other)
274 EIGEN_DEVICE_FUNC static Quaternion UnitRandom();
277 EIGEN_DEVICE_FUNC static Quaternion FromTwoVectors(const MatrixBase<Derived1>& a, const MatrixBase<Derived2>& b);
301 * single precision quaternion type */
302 typedef Quaternion<float> Quaternionf;
304 * double precision quaternion type */
305 typedef Quaternion<double> Quaterniond;
308 * Specialization of Map<Quaternion<Scalar>>
313 struct traits<Map<Quaternion<_Scalar>, _Options> > : traits<Quaternion<_Scalar, (int(_Options)&Aligned)==Aligned ? AutoAlign : DontAlign> >
321 struct traits<Map<const Quaternion<_Scalar>, _Options> > : traits<Quaternion<_Scalar, (int(_Options)&Aligned)==Aligned ? AutoAlign : DontAlign> >
324 typedef traits<Quaternion<_Scalar, (int(_Options)&Aligned)==Aligned ? AutoAlign : DontAlign> > TraitsBase;
332 * \brief Quaternion expression mapping a constant memory buffer
334 * \tparam _Scalar the type of the Quaternion coefficients
337 * This is a specialization of class Map for Quaternion. This class allows to view
338 * a 4 scalar memory buffer as an Eigen's Quaternion object.
340 * \sa class Map, class Quaternion, class QuaternionBase
343 class Map<const Quaternion<_Scalar>, _Options >
344 : public QuaternionBase<Map<const Quaternion<_Scalar>, _Options> >
347 typedef QuaternionBase<Map<const Quaternion<_Scalar>, _Options> > Base;
354 /** Constructs a Mapped Quaternion object from the pointer \a coeffs
356 * The pointer \a coeffs must reference the four coefficients of Quaternion in the following order:
369 * \brief Expression of a quaternion from a memory buffer
371 * \tparam _Scalar the type of the Quaternion coefficients
374 * This is a specialization of class Map for Quaternion. This class allows to view
375 * a 4 scalar memory buffer as an Eigen's Quaternion object.
377 * \sa class Map, class Quaternion, class QuaternionBase
380 class Map<Quaternion<_Scalar>, _Options >
381 : public QuaternionBase<Map<Quaternion<_Scalar>, _Options> >
384 typedef QuaternionBase<Map<Quaternion<_Scalar>, _Options> > Base;
391 /** Constructs a Mapped Quaternion object from the pointer \a coeffs
393 * The pointer \a coeffs must reference the four coefficients of Quaternion in the following order:
407 * Map an unaligned array of single precision scalars as a quaternion */
408 typedef Map<Quaternion<float>, 0> QuaternionMapf;
410 * Map an unaligned array of double precision scalars as a quaternion */
411 typedef Map<Quaternion<double>, 0> QuaternionMapd;
413 * Map a 16-byte aligned array of single precision scalars as a quaternion */
414 typedef Map<Quaternion<float>, Aligned> QuaternionMapAlignedf;
416 * Map a 16-byte aligned array of double precision scalars as a quaternion */
417 typedef Map<Quaternion<double>, Aligned> QuaternionMapAlignedd;
423 // Generic Quaternion * Quaternion product
428 EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Quaternion<Scalar> run(const QuaternionBase<Derived1>& a, const QuaternionBase<Derived2>& b){
429 return Quaternion<Scalar>
440 /** \returns the concatenation of two rotations as a quaternion-quaternion product */
443 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion<typename internal::traits<Derived>::Scalar>
452 /** \sa operator*(Quaternion) */
461 /** Rotation of a vector by a quaternion.
462 * \remarks If the quaternion is used to rotate several points (>1)
511 * - if \a xpr is a 4x1 vector, then \a xpr is assumed to be a quaternion
513 * and \a xpr is converted to a quaternion
526 /** Convert the quaternion to a 3x3 rotation matrix. The quaternion is required to
565 /** Sets \c *this to be a quaternion representing a rotation between
613 /** \returns a random unit quaternion following a uniform distribution law on SO(3)
618 EIGEN_DEVICE_FUNC Quaternion<Scalar,Options> Quaternion<Scalar,Options>::UnitRandom()
628 return Quaternion (a * sin(u2), a * cos(u2), b * sin(u3), b * cos(u3));
632 /** Returns a quaternion representing a rotation between
637 * \returns resulting quaternion
644 EIGEN_DEVICE_FUNC Quaternion<Scalar,Options> Quaternion<Scalar,Options>::FromTwoVectors(const MatrixBase<Derived1>& a, const MatrixBase<Derived2>& b)
646 Quaternion quat;
654 * and/or the quaternion is normalized, then it is enough to use the conjugate.
659 EIGEN_DEVICE_FUNC inline Quaternion<typename internal::traits<Derived>::Scalar> QuaternionBase<Derived>::inverse() const
664 return Quaternion<Scalar>(conjugate().coeffs() / n2);
668 return Quaternion<Scalar>(Coefficients::Zero());
672 // Generic conjugate of a Quaternion
676 EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Quaternion<Scalar> run(const QuaternionBase<Derived>& q){
677 return Quaternion<Scalar>(q.w(),-q.x(),-q.y(),-q.z());
683 * if the quaternion is normalized.
684 * The conjugate of a quaternion represents the opposite rotation.
689 EIGEN_DEVICE_FUNC inline Quaternion<typename internal::traits<Derived>::Scalar>
706 Quaternion<Scalar> d = (*this) * other.conjugate();
720 EIGEN_DEVICE_FUNC Quaternion<typename internal::traits<Derived>::Scalar>
748 return Quaternion<Scalar>(scale0 * coeffs() + scale1 * other.coeffs());
762 // This algorithm comes from "Quaternion Calculus and Fast Animation",
794 // set from a vector of coefficients assumed to be a quaternion