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/point.hpp>
|
||||||
#include <psemek/geom/box.hpp>
|
#include <psemek/geom/box.hpp>
|
||||||
#include <psemek/pcg/random/uniform_real.hpp>
|
#include <psemek/pcg/random/uniform.hpp>
|
||||||
|
|
||||||
namespace psemek::pcg
|
namespace psemek::pcg
|
||||||
{
|
{
|
||||||
|
|
@ -10,13 +10,13 @@ namespace psemek::pcg
|
||||||
template <typename T, std::size_t N>
|
template <typename T, std::size_t N>
|
||||||
struct box_point_distribution
|
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)
|
box_point_distribution(geom::box<T, N> const & b)
|
||||||
{
|
{
|
||||||
for (std::size_t i = 0; i < N; ++i)
|
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;
|
geom::point<T, N> p;
|
||||||
for (std::size_t i = 0; i < N; ++i)
|
for (std::size_t i = 0; i < N; ++i)
|
||||||
p[i] = d[i](rng);
|
p[i] = d_[i](rng);
|
||||||
return p;
|
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>
|
template <typename RNG>
|
||||||
T operator()(RNG && rng);
|
T operator()(RNG && rng);
|
||||||
|
|
||||||
|
T mean() const { return mean_; }
|
||||||
|
|
||||||
|
T stddev() const { return stddev_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T mean_;
|
T mean_;
|
||||||
T stddev_;
|
T stddev_;
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@ namespace psemek::pcg
|
||||||
template <typename RNG>
|
template <typename RNG>
|
||||||
T operator()(RNG && rng);
|
T operator()(RNG && rng);
|
||||||
|
|
||||||
|
geom::interval<T> range() const { return range_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
geom::interval<T> range_;
|
geom::interval<T> range_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@ namespace psemek::pcg
|
||||||
template <typename RNG>
|
template <typename RNG>
|
||||||
T operator()(RNG && rng);
|
T operator()(RNG && rng);
|
||||||
|
|
||||||
|
geom::interval<T> range() const { return range_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
geom::interval<T> range_;
|
geom::interval<T> range_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ namespace psemek::pcg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T radius() const { return r_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
normal_distribution<T> d_;
|
normal_distribution<T> d_;
|
||||||
T r_;
|
T r_;
|
||||||
|
|
@ -60,6 +62,8 @@ namespace psemek::pcg
|
||||||
return {-r_};
|
return {-r_};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T radius() const { return r_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T r_;
|
T r_;
|
||||||
};
|
};
|
||||||
|
|
@ -83,6 +87,8 @@ namespace psemek::pcg
|
||||||
return r_ * result_type{std::cos(a), std::sin(a)};
|
return r_ * result_type{std::cos(a), std::sin(a)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T radius() const { return r_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T r_;
|
T r_;
|
||||||
};
|
};
|
||||||
|
|
@ -116,6 +122,8 @@ namespace psemek::pcg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T radius() const { return r_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T r_;
|
T r_;
|
||||||
};
|
};
|
||||||
|
|
@ -136,6 +144,10 @@ namespace psemek::pcg
|
||||||
return origin_ + vector_d_(rng);
|
return origin_ + vector_d_(rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result_type origin() const { return origin_; }
|
||||||
|
|
||||||
|
T radius() const { return vector_d_.radius(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
result_type origin_;
|
result_type origin_;
|
||||||
uniform_sphere_vector_distribution<T, N> vector_d_;
|
uniform_sphere_vector_distribution<T, N> vector_d_;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue