Support retrieving distribution parameters
This commit is contained in:
parent
eb5577909a
commit
9949c0c232
5 changed files with 35 additions and 4 deletions
|
|
@ -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];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue