Merged simple geometry asserts.

This commit is contained in:
Hauke Heibel 2013-07-25 21:21:21 +02:00
commit 5897695e8a
2 changed files with 17 additions and 1 deletions

2
.hgeol
View File

@ -1,6 +1,8 @@
[patterns] [patterns]
*.MINPACK = CRLF
scripts/*.in = LF scripts/*.in = LF
debug/msvc/*.dat = CRLF debug/msvc/*.dat = CRLF
debug/msvc/*.natvis = CRLF
unsupported/test/mpreal/*.* = CRLF unsupported/test/mpreal/*.* = CRLF
** = native ** = native

View File

@ -67,12 +67,21 @@ public:
/** Default constructor without initialization. */ /** Default constructor without initialization. */
AngleAxis() {} AngleAxis() {}
/** Constructs and initialize the angle-axis rotation from an \a angle in radian /** Constructs and initialize the angle-axis rotation from an \a angle in radian
* and an \a axis which must be normalized. */ * and an \a axis which must be normalized. */
template<typename Derived> template<typename Derived>
inline AngleAxis(Scalar angle, const MatrixBase<Derived>& axis) : m_axis(axis), m_angle(angle) {} inline AngleAxis(Scalar angle, const MatrixBase<Derived>& axis) : m_axis(axis), m_angle(angle)
{
using std::sqrt;
using std::abs;
// since we compare against 1, this is equal to computing the relative error
eigen_assert( abs(m_axis.derived().squaredNorm() - 1) < sqrt( dummy_precision<Scalar>() ) );
}
/** Constructs and initialize the angle-axis rotation from a quaternion \a q. */ /** Constructs and initialize the angle-axis rotation from a quaternion \a q. */
inline AngleAxis(const QuaternionType& q) { *this = q; } inline AngleAxis(const QuaternionType& q) { *this = q; }
/** Constructs and initialize the angle-axis rotation from a 3x3 rotation matrix. */ /** Constructs and initialize the angle-axis rotation from a 3x3 rotation matrix. */
template<typename Derived> template<typename Derived>
inline explicit AngleAxis(const MatrixBase<Derived>& m) { *this = m; } inline explicit AngleAxis(const MatrixBase<Derived>& m) { *this = m; }
@ -167,6 +176,11 @@ AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const QuaternionType& q)
{ {
m_angle = 2*std::acos(q.w()); m_angle = 2*std::acos(q.w());
m_axis = q.vec() / ei_sqrt(n2); m_axis = q.vec() / ei_sqrt(n2);
using std::sqrt;
using std::abs;
// since we compare against 1, this is equal to computing the relative error
eigen_assert( abs(m_axis.derived().squaredNorm() - 1) < sqrt( dummy_precision<Scalar>() ) );
} }
return *this; return *this;
} }