Loading [MathJax]/extensions/tex2jax.js
Radium Engine  1.5.28
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RandomPointSet.cpp
1#include <Core/Random/RandomPointSet.hpp>
2#include <algorithm>
3
4namespace Ra {
5namespace Core {
6namespace Random {
7
8FibonacciSequence::FibonacciSequence( size_t number ) : n { std::max( size_t( 5 ), number ) } {}
9
10size_t FibonacciSequence::range() {
11 return n;
12}
13Scalar FibonacciSequence::operator()( size_t i ) {
14 return Scalar( i ) / phi;
15}
16
17Scalar VanDerCorputSequence::operator()( unsigned int bits ) {
18 bits = ( bits << 16u ) | ( bits >> 16u );
19 bits = ( ( bits & 0x55555555u ) << 1u ) | ( ( bits & 0xAAAAAAAAu ) >> 1u );
20 bits = ( ( bits & 0x33333333u ) << 2u ) | ( ( bits & 0xCCCCCCCCu ) >> 2u );
21 bits = ( ( bits & 0x0F0F0F0Fu ) << 4u ) | ( ( bits & 0xF0F0F0F0u ) >> 4u );
22 bits = ( ( bits & 0x00FF00FFu ) << 8u ) | ( ( bits & 0xFF00FF00u ) >> 8u );
23 return Scalar( float( bits ) * 2.3283064365386963e-10_ra ); // / 0x100000000
24}
25
26FibonacciPointSet::FibonacciPointSet( size_t n ) : seq( n ) {}
27
28size_t FibonacciPointSet::range() {
29 return seq.range();
30}
31Ra::Core::Vector2 FibonacciPointSet::operator()( size_t i ) {
32 return { seq( i ), Scalar( i ) / Scalar( range() ) };
33}
34
35HammersleyPointSet::HammersleyPointSet( size_t number ) : n( number ) {}
36
37size_t HammersleyPointSet::range() {
38 return n;
39}
40
41Ra::Core::Vector2 HammersleyPointSet::operator()( size_t i ) {
42 return { Scalar( i ) / Scalar( range() ), seq( i ) };
43}
44
45MersenneTwisterPointSet::MersenneTwisterPointSet( size_t number ) :
46 gen( 0 ), seq( 0._ra, 1._ra ), n( number ) {}
47
48size_t MersenneTwisterPointSet::range() {
49 return n;
50}
51Ra::Core::Vector2 MersenneTwisterPointSet::operator()( size_t ) {
52 return { seq( gen ), seq( gen ) };
53}
54
55} // namespace Random
56} // namespace Core
57} // namespace Ra
T max(T... args)
hepler function to manage enum as underlying types in VariableSet
Definition Cage.cpp:4