Support Forum       Library Source       SourceForge Page       G3D Web Page     
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
G3D::PrecomputedRandom Class Reference

Fast random numbers using a precomputed data table. More...

Inherits G3D::Random.

Classes

class  HemiUniformData
 Put the cosHemi and the uniform together so that when alternating between them we stay in cache. More...
 
class  SphereBitsData
 

Public Member Functions

 PrecomputedRandom (const HemiUniformData *data1, const SphereBitsData *data2, int dataSize, uint32 seed=0xF018A4D2)
 
 PrecomputedRandom (int dataSize, uint32 seed=0xF018A4D2)
 
 ~PrecomputedRandom ()
 
virtual uint32 bits ()
 Each bit is random.
 
virtual void cosHemi (float &x, float &y, float &z)
 Returns 3D unit vectors distributed according to a cosine distribution about the z axis.
 
virtual void cosPowHemi (const float k, float &x, float &y, float &z)
 Returns 3D unit vectors distributed according to a cosine power distribution ( $ \mbox{cos}^k \theta $) about the z-axis.
 
virtual void cosSphere (float &x, float &y, float &z)
 Returns 3D unit vectors distributed according to a cosine distribution about the z-axis.
 
virtual float gaussian (float mean, float stdev)
 Normally distributed reals.
 
virtual void hemi (float &x, float &y, float &z)
 Returns 3D unit vectors uniformly distributed on the hemisphere about the z-axis.
 
virtual int integer (int min, int max)
 Uniform random integer on the range [min, max].
 
virtual void reset (uint32 seed=0xF018A4D2, bool threadsafe=true)
 
virtual void sphere (float &x, float &y, float &z)
 Returns 3D unit vectors uniformly distributed on the sphere.
 
virtual float uniform (float low, float high)
 Uniform random float on the range [min, max].
 
virtual float uniform ()
 Uniform random float on the range [0, 1].
 

Static Public Member Functions

static Randomcommon ()
 A shared instance for when the performance and features but not consistency of the class are desired.
 

Protected Types

enum  {
  N = 624,
  M = 397,
  R = 31,
  U = 11,
  S = 7,
  T = 15,
  L = 18,
  A = 0x9908B0DF,
  B = 0x9D2C5680,
  C = 0xEFC60000
}
 Constants (important for the algorithm; do not modify) More...
 

Protected Member Functions

virtual void generate ()
 Generate the next N ints, and store them for readback later.
 

Protected Attributes

int index
 Index into state.
 
Spinlock lock
 Prevents multiple overlapping calls to generate().
 
bool m_freeData
 If true, free m_hemiUniform and m_sphereBits in destructor.
 
const HemiUniformDatam_hemiUniform
 Array of 2^n elements.
 
int m_index
 
int m_modMask
 2^n - 1; the AND mask for computing a fast modulo
 
const SphereBitsDatam_sphereBits
 
bool m_threadsafe
 
uint32state
 State vector (these are the next N values that will be returned)
 

Detailed Description

Fast random numbers using a precomputed data table.

e.g., generates cosHemi about 13x faster than Random. This is useful for quickly generating seeded random numbers for reproducibility. G3D::Random takes a long time to seed; this is instantaneous (providing the precomputed data is already available.)

Not threadsafe.

Member Enumeration Documentation

anonymous enum
protectedinherited

Constants (important for the algorithm; do not modify)

Enumerator:
N 
M 
R 
U 
S 
T 
L 
A 
B 
C 

Constructor & Destructor Documentation

G3D::PrecomputedRandom::PrecomputedRandom ( const HemiUniformData data1,
const SphereBitsData data2,
int  dataSize,
uint32  seed = 0xF018A4D2 
)
G3D::PrecomputedRandom::PrecomputedRandom ( int  dataSize,
uint32  seed = 0xF018A4D2 
)
Parameters
dataSizeNumber of random numbers that can be requested before periodicity. Must be a power of 2.
G3D::PrecomputedRandom::~PrecomputedRandom ( )

Member Function Documentation

virtual uint32 G3D::PrecomputedRandom::bits ( )
virtual

Each bit is random.

Subclasses can choose to override just this method and the other methods will all work automatically.

Reimplemented from G3D::Random.

static Random& G3D::Random::common ( )
staticinherited

A shared instance for when the performance and features but not consistency of the class are desired.

It is slightly (10%) faster to use a distinct instance than to use the common one.

Threadsafe.

virtual void G3D::PrecomputedRandom::cosHemi ( float &  x,
float &  y,
float &  z 
)
virtual

Returns 3D unit vectors distributed according to a cosine distribution about the z axis.

Reimplemented from G3D::Random.

virtual void G3D::PrecomputedRandom::cosPowHemi ( const float  k,
float &  x,
float &  y,
float &  z 
)
virtual

Returns 3D unit vectors distributed according to a cosine power distribution ( $ \mbox{cos}^k \theta $) about the z-axis.

Reimplemented from G3D::Random.

virtual void G3D::Random::cosSphere ( float &  x,
float &  y,
float &  z 
)
virtualinherited

Returns 3D unit vectors distributed according to a cosine distribution about the z-axis.

virtual float G3D::Random::gaussian ( float  mean,
float  stdev 
)
virtualinherited

Normally distributed reals.

virtual void G3D::Random::generate ( )
protectedvirtualinherited

Generate the next N ints, and store them for readback later.

Called from bits()

virtual void G3D::Random::hemi ( float &  x,
float &  y,
float &  z 
)
virtualinherited

Returns 3D unit vectors uniformly distributed on the hemisphere about the z-axis.

virtual int G3D::Random::integer ( int  min,
int  max 
)
virtualinherited

Uniform random integer on the range [min, max].

virtual void G3D::Random::reset ( uint32  seed = 0xF018A4D2,
bool  threadsafe = true 
)
virtualinherited
virtual void G3D::PrecomputedRandom::sphere ( float &  x,
float &  y,
float &  z 
)
virtual

Returns 3D unit vectors uniformly distributed on the sphere.

Reimplemented from G3D::Random.

virtual float G3D::PrecomputedRandom::uniform ( float  low,
float  high 
)
virtual

Uniform random float on the range [min, max].

Reimplemented from G3D::Random.

virtual float G3D::PrecomputedRandom::uniform ( )
virtual

Uniform random float on the range [0, 1].

Reimplemented from G3D::Random.

Member Data Documentation

int G3D::Random::index
protectedinherited

Index into state.

Spinlock G3D::Random::lock
protectedinherited

Prevents multiple overlapping calls to generate().

bool G3D::PrecomputedRandom::m_freeData
protected

If true, free m_hemiUniform and m_sphereBits in destructor.

const HemiUniformData* G3D::PrecomputedRandom::m_hemiUniform
protected

Array of 2^n elements.

int G3D::PrecomputedRandom::m_index
protected
int G3D::PrecomputedRandom::m_modMask
protected

2^n - 1; the AND mask for computing a fast modulo

const SphereBitsData* G3D::PrecomputedRandom::m_sphereBits
protected
bool G3D::Random::m_threadsafe
protectedinherited
uint32* G3D::Random::state
protectedinherited

State vector (these are the next N values that will be returned)


documentation generated on Sat Jan 12 2013 22:49:56 using doxygen 1.8.2