46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
/* test_uniform_on_sphere.cpp
|
|
*
|
|
* Copyright Steven Watanabe 2011
|
|
* Distributed under the Boost Software License, Version 1.0. (See
|
|
* accompanying file LICENSE_1_0.txt or copy at
|
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
*
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#include <boost/random/uniform_on_sphere.hpp>
|
|
#include <boost/random/uniform_int.hpp>
|
|
#include <boost/math/distributions/uniform.hpp>
|
|
#include <cmath>
|
|
|
|
class uniform_on_sphere_test {
|
|
public:
|
|
typedef double result_type;
|
|
uniform_on_sphere_test(int dims, int x, int y)
|
|
: impl(dims), idx1(x), idx2(y) {}
|
|
template<class Engine>
|
|
result_type operator()(Engine& rng) {
|
|
const boost::random::uniform_on_sphere<>::result_type& tmp = impl(rng);
|
|
// This should be uniformly distributed in [-pi,pi)
|
|
return std::atan2(tmp[idx1], tmp[idx2]);
|
|
}
|
|
private:
|
|
boost::random::uniform_on_sphere<> impl;
|
|
int idx1, idx2;
|
|
};
|
|
|
|
static const double pi = 3.14159265358979323846;
|
|
|
|
#define BOOST_RANDOM_DISTRIBUTION uniform_on_sphere_test
|
|
#define BOOST_RANDOM_DISTRIBUTION_NAME uniform_on_sphere
|
|
#define BOOST_MATH_DISTRIBUTION boost::math::uniform
|
|
#define BOOST_RANDOM_ARG1_TYPE double
|
|
#define BOOST_RANDOM_ARG1_NAME n
|
|
#define BOOST_RANDOM_ARG1_DEFAULT 6
|
|
#define BOOST_RANDOM_ARG1_DISTRIBUTION(n) boost::uniform_int<>(2, n)
|
|
#define BOOST_RANDOM_DISTRIBUTION_INIT (n, 0, n-1)
|
|
#define BOOST_MATH_DISTRIBUTION_INIT (-pi, pi)
|
|
|
|
#include "test_real_distribution.ipp"
|