mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-08 09:49:03 +08:00
Add Quaternion constructor from real scalar and imaginary vector
This commit is contained in:
parent
31cd2ad371
commit
bc57b926a0
@ -298,6 +298,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
EIGEN_DEVICE_FUNC inline Quaternion(const Scalar& w, const Scalar& x, const Scalar& y, const Scalar& z) : m_coeffs(x, y, z, w){}
|
EIGEN_DEVICE_FUNC inline Quaternion(const Scalar& w, const Scalar& x, const Scalar& y, const Scalar& z) : m_coeffs(x, y, z, w){}
|
||||||
|
|
||||||
|
/** Constructs and initializes a quaternion from its real part as a scalar,
|
||||||
|
* and its imaginary part as a 3-vector [\c x, \c y, \c z]
|
||||||
|
*/
|
||||||
|
template <typename Derived>
|
||||||
|
EIGEN_DEVICE_FUNC inline Quaternion(const Scalar& w, const Eigen::MatrixBase<Derived>& vec)
|
||||||
|
: m_coeffs(vec.x(), vec.y(), vec.z(), w) {
|
||||||
|
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 3);
|
||||||
|
}
|
||||||
|
|
||||||
/** Constructs and initialize a quaternion from the array data */
|
/** Constructs and initialize a quaternion from the array data */
|
||||||
EIGEN_DEVICE_FUNC explicit inline Quaternion(const Scalar* data) : m_coeffs(data) {}
|
EIGEN_DEVICE_FUNC explicit inline Quaternion(const Scalar* data) : m_coeffs(data) {}
|
||||||
|
|
||||||
|
@ -98,6 +98,10 @@ template<typename Scalar, int Options> void quaternion(void)
|
|||||||
VERIFY_IS_MUCH_SMALLER_THAN(abs(q1.angularDistance(q2) - refangle), Scalar(1));
|
VERIFY_IS_MUCH_SMALLER_THAN(abs(q1.angularDistance(q2) - refangle), Scalar(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Action on vector by the q v q* formula
|
||||||
|
VERIFY_IS_APPROX(q1 * v2, (q1 * Quaternionx(Scalar(0), v2) * q1.inverse()).vec());
|
||||||
|
VERIFY_IS_APPROX(q1.inverse() * v2, (q1.inverse() * Quaternionx(Scalar(0), v2) * q1).vec());
|
||||||
|
|
||||||
// rotation matrix conversion
|
// rotation matrix conversion
|
||||||
VERIFY_IS_APPROX(q1 * v2, q1.toRotationMatrix() * v2);
|
VERIFY_IS_APPROX(q1 * v2, q1.toRotationMatrix() * v2);
|
||||||
VERIFY_IS_APPROX(q1 * q2 * v2,
|
VERIFY_IS_APPROX(q1 * q2 * v2,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user