mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +08:00
Fix coding practice in Quaternion::UniformRandom
This commit is contained in:
parent
eb0cc2573a
commit
7a9d9cde94
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user