16# define M_PI 3.14159265358979323846264338327950288
28 extern const std::array<double, TABLE_SIZE>
X;
29 extern const std::array<double, TABLE_SIZE>
NEG_COSINE;
30 extern const std::array<double, TABLE_SIZE>
SINE;
31 extern const std::array<double, TABLE_SIZE>
F2;
36 std::vector<double>
linspace(
double start,
double stop,
unsigned int num);
42 std::span<const double> y_points);
49 std::vector<double>
get_tp(
unsigned int n);
64 virtual std::vector<
double>
pop() = 0;
65 virtual
void reseed(
unsigned long seed) = 0;
77 explicit Sphere3(std::span<const unsigned long> base);
78 std::array<double, 4>
pop();
84 mutable std::mutex mutex_;
93 std::vector<double>
pop()
override;
94 void reseed(
unsigned long seed)
override;
98 mutable std::mutex mutex_;
108 explicit SphereN(std::span<const unsigned long> base);
109 std::vector<double>
pop()
override;
110 void reseed(
unsigned long seed)
override;
114 std::unique_ptr<SphereGen> s_gen_;
116 std::vector<double> tp_;
118 mutable std::mutex mutex_;
3-Sphere sequence generator (standalone, returns std::array).
Definition sphere_n.hpp:75
Sphere3(std::span< const unsigned long > base)
std::array< double, 4 > pop()
void reseed(unsigned long seed)
Base class for sphere generators.
Definition sphere_n.hpp:56
virtual void reseed(unsigned long seed)=0
SphereGen(const SphereGen &)=default
virtual std::vector< double > pop()=0
SphereGen(SphereGen &&) noexcept=default
N-dimensional sphere sequence generator.
Definition sphere_n.hpp:106
std::vector< double > pop() override
void reseed(unsigned long seed) override
SphereN(std::span< const unsigned long > base)
Wrapper class to make Sphere compatible with SphereGen interface.
Definition sphere_n.hpp:90
void reseed(unsigned long seed) override
std::vector< double > pop() override
SphereWrapper(std::span< const unsigned long > base)
Sphere sequence generator.
Definition lds.hpp:615
Van der Corput sequence generator.
Definition lds.hpp:346
Low-discrepancy sequence generators with thread-safe runtime polymorphism (ldsgen).
#define M_PI
Definition lds.hpp:16
constexpr double PI
Definition sphere_n.hpp:21
constexpr double HALF_PI
Definition sphere_n.hpp:22
constexpr std::size_t TABLE_SIZE
Number of interpolation points for sphere mapping tables.
Definition sphere_n.hpp:25
const std::array< double, TABLE_SIZE > SINE
std::vector< double > linspace(double start, double stop, unsigned int num)
Generate evenly spaced numbers over a specified interval.
const std::array< double, TABLE_SIZE > F2
const std::array< double, TABLE_SIZE > X
Precomputed interpolation tables (static storage, no heap)
const std::array< double, TABLE_SIZE > NEG_COSINE
double simple_interp(double x_value, std::span< const double > x_points, std::span< const double > y_points)
Perform one-dimensional linear interpolation.
std::vector< double > get_tp(unsigned int n)
Compute Tp(n) recurrence for sphere mapping.