New user self-registration is currently disabled. Please email eigen-core-team @ if you need an account.
Bug 823 - Provide static Quaternion method for uniform random rotation
Provide static Quaternion method for uniform random rotation
Product: Eigen
Classification: Unclassified
Component: Geometry
All All
: Low Feature Request
Assigned To: Nobody
: JuniorJob
Depends on:
  Show dependency treegraph
Reported: 2014-06-06 10:43 UTC by edx
Modified: 2016-05-20 11:24 UTC (History)
5 users (show)

Add uniformly random quaternion (2.26 KB, patch)
2016-03-21 14:45 UTC, Joseph Mirabel
no flags Details | Diff

Description edx 2014-06-06 10:43:22 UTC
Please implement some algorithm for generating uniformly-distributed random orientation; an algorithm is decribed in (references Shoemaker's Uniform random rotations from Graphic Gems III).

A tentative implementation  goes like this (with UnitRandom returning uniform in 0..1):

  template<typename Scalar>
  Quaternion<Scalar> UniformRandomRotation(){
    Scalar u1=UnitRandom(), u2=UnitRandom(), u3=UnitRandom();
    return Quaternion<Scalar>(/*w*/sqrt(u1)*cos(2*M_PI*u3),/*x*/sqrt(1-u1)*sin(2*M_PI*u2),/*y*/sqrt(1-u1)*cos(2*M_PI*u2),/*z*/sqrt(u1)*sin(2*M_PI*u3));
Comment 1 Gael Guennebaud 2014-06-06 11:35:06 UTC
Please provide a clean patch with documentation and its respective unit test (added in test/geo_quaternion.cpp) so that it can be integrated quickly.

For "UnitRandom" you can use internal::random<Scalar>(0,1);

Comment 2 Joseph Mirabel 2016-03-21 14:45:46 UTC
Created attachment 669 [details]
Add uniformly random quaternion

Would this fit the Eigen coding standards ?
Comment 3 Gael Guennebaud 2016-05-20 11:24:11 UTC
Sorry for the delay, but it's now in devel branch:
Summary: Bug 823: add static method to Quaternion for uniform random rotations.
Summary: Fix coding practice in Quaternion::UniformRandom
Summary: Rename UniformRandom to UnitRandom.

Note You need to log in before you can comment on or make changes to this bug.