TrinityCore
|
#include <Random.h>
Public Member Functions | |
Random (uint32 seed=0xF018A4D2, bool threadsafe=true) | |
virtual | ~Random () |
virtual void | reset (uint32 seed=0xF018A4D2, bool threadsafe=true) |
virtual uint32 | bits () |
virtual int | integer (int min, int max) |
virtual float | uniform (float low, float high) |
virtual float | uniform () |
virtual float | gaussian (float mean, float stdev) |
virtual void | cosHemi (float &x, float &y, float &z) |
virtual void | cosSphere (float &x, float &y, float &z) |
virtual void | cosPowHemi (const float k, float &x, float &y, float &z) |
virtual void | hemi (float &x, float &y, float &z) |
virtual void | sphere (float &x, float &y, float &z) |
Static Public Member Functions | |
static Random & | common () |
Protected Types | |
enum | { N = 624, M = 397, R = 31, U = 11, S = 7, T = 15, L = 18, A = 0x9908B0DF, B = 0x9D2C5680, C = 0xEFC60000 } |
Protected Member Functions | |
virtual void | generate () |
Random (void *) | |
Protected Attributes | |
Spinlock | lock |
uint32 * | state |
int | index |
bool | m_threadsafe |
Private Member Functions | |
Random & | operator= (const Random &) |
Random (const Random &r) | |
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().
[http://www.math.sci.hiroshima-u.ac.jp/]~m-mat/MT/SFMT/index.html
On OS X, Random is about 10x faster than drand48() (which is threadsafe) and 4x faster than rand() (which is not threadsafe).
|
protected |
Constants (important for the algorithm; do not modify)
Enumerator | |
---|---|
N | |
M | |
R | |
U | |
S | |
T | |
L | |
A | |
B | |
C |
|
protected |
For subclasses. The void* parameter is just to distinguish this from the public constructor.
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.
|
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()
Generate the next N ints, and store them for readback later
|
virtual |
Returns 3D unit vectors uniformly distributed on the hemisphere about the z-axis.
|
virtual |
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)