Support retrieving distribution parameters

This commit is contained in:
Nikita Lisitsa 2020-09-27 16:44:02 +03:00
parent eb5577909a
commit 9949c0c232
5 changed files with 35 additions and 4 deletions

View file

@ -2,7 +2,7 @@
#include <psemek/geom/point.hpp>
#include <psemek/geom/box.hpp>
#include <psemek/pcg/random/uniform_real.hpp>
#include <psemek/pcg/random/uniform.hpp>
namespace psemek::pcg
{
@ -10,13 +10,13 @@ namespace psemek::pcg
template <typename T, std::size_t N>
struct box_point_distribution
{
uniform_real_distribution<T> d[N];
using result_type = geom::point<T, N>;
box_point_distribution(geom::box<T, N> const & b)
{
for (std::size_t i = 0; i < N; ++i)
{
d[i] = uniform_real_distribution<T>{b[i]};
d_[i] = uniform_distribution<T>{b[i]};
}
}
@ -27,9 +27,20 @@ namespace psemek::pcg
{
geom::point<T, N> p;
for (std::size_t i = 0; i < N; ++i)
p[i] = d[i](rng);
p[i] = d_[i](rng);
return p;
}
geom::box<T, N> box() const
{
geom::box<T, N> result;
for (std::size_t i = 0; i < N; ++i)
result[i] = d_[i].range();
return result;
}
private:
uniform_distribution<T> d_[N];
};
}

View file

@ -31,6 +31,10 @@ namespace psemek::pcg
template <typename RNG>
T operator()(RNG && rng);
T mean() const { return mean_; }
T stddev() const { return stddev_; }
private:
T mean_;
T stddev_;

View file

@ -32,6 +32,8 @@ namespace psemek::pcg
template <typename RNG>
T operator()(RNG && rng);
geom::interval<T> range() const { return range_; }
private:
geom::interval<T> range_;

View file

@ -32,6 +32,8 @@ namespace psemek::pcg
template <typename RNG>
T operator()(RNG && rng);
geom::interval<T> range() const { return range_; }
private:
geom::interval<T> range_;

View file

@ -35,6 +35,8 @@ namespace psemek::pcg
}
}
T radius() const { return r_; }
private:
normal_distribution<T> d_;
T r_;
@ -60,6 +62,8 @@ namespace psemek::pcg
return {-r_};
}
T radius() const { return r_; }
private:
T r_;
};
@ -83,6 +87,8 @@ namespace psemek::pcg
return r_ * result_type{std::cos(a), std::sin(a)};
}
T radius() const { return r_; }
private:
T r_;
};
@ -116,6 +122,8 @@ namespace psemek::pcg
}
}
T radius() const { return r_; }
private:
T r_;
};
@ -136,6 +144,10 @@ namespace psemek::pcg
return origin_ + vector_d_(rng);
}
result_type origin() const { return origin_; }
T radius() const { return vector_d_.radius(); }
private:
result_type origin_;
uniform_sphere_vector_distribution<T, N> vector_d_;