diff options
author | 2016-05-20 13:19:52 +0200 | |
---|---|---|
committer | 2016-05-20 13:19:52 +0200 | |
commit | 7a9d9cde94897f09a5a3640f431bc94f78265776 (patch) | |
tree | ef824adac1e5390f834676956b2f5f0e1ceb14ef /Eigen/src/Geometry/Quaternion.h | |
parent | eb0cc2573a7561ab85bf6698f2bf5162c11c8681 (diff) |
Fix coding practice in Quaternion::UniformRandom
Diffstat (limited to 'Eigen/src/Geometry/Quaternion.h')
-rw-r--r-- | Eigen/src/Geometry/Quaternion.h | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h index babfc86a9..c7fcaf940 100644 --- a/Eigen/src/Geometry/Quaternion.h +++ b/Eigen/src/Geometry/Quaternion.h @@ -611,24 +611,22 @@ inline Derived& QuaternionBase<Derived>::setFromTwoVectors(const MatrixBase<Deri return derived(); } -/** Returns a random quaternion following a uniform distribution law. - * - * \returns resulting quaternion +/** \returns a random unit quaternion following a uniform distribution law on SO(3) * * \note The implementation is based on http://planning.cs.uiuc.edu/node198.html */ template<typename Scalar, int Options> Quaternion<Scalar,Options> Quaternion<Scalar,Options>::UniformRandom() { - const Scalar u1 = internal::random<Scalar>(0,1), - u2 = internal::random<Scalar>(0, 2*M_PI), - u3 = internal::random<Scalar>(0, 2*M_PI); - const Scalar a = std::sqrt (1 - u1), - b = std::sqrt (u1); - return Quaternion (a * std::sin (u2), - a * std::cos (u2), - b * std::sin (u3), - b * std::cos (u3)); + using std::sqrt; + using std::sin; + using std::cos; + const Scalar u1 = internal::random<Scalar>(0, 1), + u2 = internal::random<Scalar>(0, 2*EIGEN_PI), + u3 = internal::random<Scalar>(0, 2*EIGEN_PI); + const Scalar a = sqrt(1 - u1), + b = sqrt(u1); + return Quaternion (a * sin(u2), a * cos(u2), b * sin(u3), b * cos(u3)); } |