27 #ifndef _RL_MATH_QUATERNIONBASEADDONS_H_
28 #define _RL_MATH_QUATERNIONBASEADDONS_H_
31 fromUniform(
const Scalar& rand0,
const Scalar& rand1,
const Scalar& rand2)
33 eigen_assert(rand0 >= Scalar(0));
34 eigen_assert(rand0 <= Scalar(1));
35 eigen_assert(rand1 >= Scalar(0));
36 eigen_assert(rand1 <= Scalar(1));
37 eigen_assert(rand2 >= Scalar(0));
38 eigen_assert(rand2 <= Scalar(1));
40 Scalar sigma1 = ::std::sqrt(Scalar(1) - rand0);
41 Scalar sigma2 = ::std::sqrt(rand0);
42 Scalar theta1 = Scalar(2) *
static_cast< Scalar
>(M_PI) * rand1;
43 Scalar theta2 = Scalar(2) *
static_cast< Scalar
>(M_PI) * rand2;
45 this->w() = ::std::cos(theta2) * sigma2;
46 this->x() = ::std::sin(theta1) * sigma1;
47 this->y() = ::std::cos(theta1) * sigma1;
48 this->z() = ::std::sin(theta2) * sigma2;
51 #endif // _RL_MATH_QUATERNIONBASEADDONS_H_