Fix coding practice in Quaternion::UniformRandom

This commit is contained in:
Gael Guennebaud 2016-05-20 13:19:52 +02:00
parent eb0cc2573a
commit 7a9d9cde94

View File

@ -611,24 +611,22 @@ inline Derived& QuaternionBase<Derived>::setFromTwoVectors(const MatrixBase<Deri
return derived(); return derived();
} }
/** Returns a random quaternion following a uniform distribution law. /** \returns a random unit quaternion following a uniform distribution law on SO(3)
*
* \returns resulting quaternion
* *
* \note The implementation is based on http://planning.cs.uiuc.edu/node198.html * \note The implementation is based on http://planning.cs.uiuc.edu/node198.html
*/ */
template<typename Scalar, int Options> template<typename Scalar, int Options>
Quaternion<Scalar,Options> Quaternion<Scalar,Options>::UniformRandom() Quaternion<Scalar,Options> Quaternion<Scalar,Options>::UniformRandom()
{ {
const Scalar u1 = internal::random<Scalar>(0,1), using std::sqrt;
u2 = internal::random<Scalar>(0, 2*M_PI), using std::sin;
u3 = internal::random<Scalar>(0, 2*M_PI); using std::cos;
const Scalar a = std::sqrt (1 - u1), const Scalar u1 = internal::random<Scalar>(0, 1),
b = std::sqrt (u1); u2 = internal::random<Scalar>(0, 2*EIGEN_PI),
return Quaternion (a * std::sin (u2), u3 = internal::random<Scalar>(0, 2*EIGEN_PI);
a * std::cos (u2), const Scalar a = sqrt(1 - u1),
b * std::sin (u3), b = sqrt(u1);
b * std::cos (u3)); return Quaternion (a * sin(u2), a * cos(u2), b * sin(u3), b * cos(u3));
} }