| Support Forum Library Source SourceForge Page 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. | |
| virtual void | cosHemi (float &x, float &y, float &z) |
| Returns 3D unit vectors distributed according to a cosine distribution about the positive 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 ( ) 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 Random & | common () |
| 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 | |
| Random (void *) | |
| For subclasses. | |
| 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_threadsafe |
| uint32 * | state |
| State vector (these are the next N values that will be returned) | |
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.
Referenced by uniform().
|
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.
|
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.
Uniform random integer on the range [min, max].
|
virtual |
Returns 3D unit vectors uniformly distributed on the sphere.
Reimplemented in G3D::PrecomputedRandom.
|
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)
1.8.2