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){}
|
||||
|
||||
/** 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 */
|
||||
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));
|
||||
}
|
||||
|
||||
// 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
|
||||
VERIFY_IS_APPROX(q1 * v2, q1.toRotationMatrix() * v2);
|
||||
VERIFY_IS_APPROX(q1 * q2 * v2,
|
||||
|
Loading…
x
Reference in New Issue
Block a user