Support Forum G3D Web Page |
Random number generator. More...
Inherited by G3D::PrecomputedRandom.
Public Member Functions | |
Random (uint32 seed=0xF018A4D2, bool threadsafe=true) | |
virtual | ~Random () |
virtual uint32 | bits () |
Each bit is random. More... | |
virtual void | cosHemi (float &x, float &y, float &z) |
Returns 3D unit vectors distributed according to a cosine distribution about the positive z-axis. More... | |
virtual void | cosPowHemi (const float k, float &x, float &y, float &z) |
Returns 3D unit vectors distributed according to a cosine power distribution ( ) about the z-axis. More... | |
virtual void | cosSphere (float &x, float &y, float &z) |
Returns 3D unit vectors distributed according to a cosine distribution about the z-axis. More... | |
virtual float | gaussian (float mean, float variance) |
Normally distributed reals. More... | |
virtual void | hemi (float &x, float &y, float &z) |
Returns 3D unit vectors uniformly distributed on the hemisphere about the z-axis. More... | |
virtual int | integer (int min, int max) |
Uniform random integer on the range [min, max]. More... | |
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. More... | |
virtual float | uniform (float low, float high) |
Uniform random float on the range [min, max]. More... | |
virtual float | uniform () |
Uniform random float on the range [0, 1]. More... | |
Static Public Member Functions | |
static Random & | common () |
A shared instance for when the performance and features but not consistency of the class are desired. More... | |
static Random & | threadCommon () |
Returns a non-threadsafe Random instance initialized with a thread-ID based seed for the current thread. More... | |
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 | |
Random (void *) | |
For subclasses. More... | |
virtual void | generate () |
Generate the next N ints, and store them for readback later. More... | |
Protected Attributes | |
int | index |
Index into state. More... | |
Spinlock | lock |
Prevents multiple overlapping calls to generate(). More... | |
bool | m_threadsafe |
uint32 * | state |
State vector (these are the next N values that will be returned) More... | |
Friends | |
class | Array< Random, 10 > |
Random number generator.
Threadsafe.
Useful for generating consistent random numbers across platforms and when multiple threads are involved.
Uses the Fast Mersenne Twister (FMT-19937) algorithm.
On average, uniform() runs about 2x-3x faster than rand().
On OS X, Random is about 10x faster than drand48() (which is threadsafe) and 4x faster than rand() (which is not threadsafe).
|
protected |
|
protected |
For subclasses.
The void* parameter is just to distinguish this from the public constructor.
G3D::Random::Random | ( | uint32 | seed = 0xF018A4D2 , |
bool | threadsafe = true |
||
) |
threadsafe | Set to false if you know that this random will only be used on a single thread. This eliminates the lock and improves performance on some platforms. |
|
virtual |
|
virtual |
Each bit is random.
Subclasses can choose to override just this method and the other methods will all work automatically.
Reimplemented in G3D::PrecomputedRandom.
|
static |
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.
Referenced by G3D::Array< G3D::AABox >::randomElement(), and G3D::Array< G3D::AABox >::randomize().
|
virtual |
Returns 3D unit vectors distributed according to a cosine distribution about the positive z-axis.
Reimplemented in G3D::PrecomputedRandom.
|
virtual |
Returns 3D unit vectors distributed according to a cosine power distribution ( ) about the z-axis.
Reimplemented in G3D::PrecomputedRandom.
|
virtual |
Returns 3D unit vectors distributed according to a cosine distribution about the z-axis.
|
virtual |
Normally distributed reals.
|
protectedvirtual |
Generate the next N ints, and store them for readback later.
Called from bits()
|
virtual |
Returns 3D unit vectors uniformly distributed on the hemisphere about the z-axis.
|
virtual |
Uniform random integer on the range [min, max].
Referenced by G3D::Array< G3D::AABox >::randomElement(), and G3D::Array< G3D::AABox >::randomize().
|
virtual |
Reimplemented in G3D::PrecomputedRandom.
|
virtual |
Returns 3D unit vectors uniformly distributed on the sphere.
Reimplemented in G3D::PrecomputedRandom.
|
static |
Returns a non-threadsafe Random instance initialized with a thread-ID based seed for the current thread.
This will always return the same instance for the same thread. Calling this repeatedly with too many threads will consume resources.
Useful for efficiently and safely producing random numbers with Thread::runConcurrently.
|
inlinevirtual |
Uniform random float on the range [min, max].
Reimplemented in G3D::PrecomputedRandom.
|
inlinevirtual |
Uniform random float on the range [0, 1].
Reimplemented in G3D::PrecomputedRandom.
|
protected |
Index into state.
|
protected |
Prevents multiple overlapping calls to generate().
|
protected |
|
protected |
State vector (these are the next N values that will be returned)