PicoVGA  1.0-cmake
VGA/TV display on Raspberry Pico
rand.h
Go to the documentation of this file.
1 
8 #ifndef _RAND_H
9 #define _RAND_H
10 
22 class cRandom
24 {
25 private:
26 
27  // random generator seed
28  u64 m_Seed;
29 
30 public:
31 
33  inline void Shift()
34  {
35  m_Seed = m_Seed*214013 + 2531011;
36  }
37 
39  inline u64 Seed() const { return m_Seed; }
40 
42  inline void SetSeed(u64 seed) { m_Seed = seed; }
43 
45  void InitSeed();
46 
47  u8 U8();
48  u16 U16();
49  u32 U32();
50  u64 U64();
51 
52  inline s8 S8() { return (s8)this->U8(); }
53  inline s16 S16() { return (s16)this->U16(); }
54  inline s32 S32() { return (s32)this->U32(); }
55  inline s64 S64() { return (s64)this->U64(); }
56 
58  float Float();
59 
61  double Double();
62 
63 
64  u8 U8Max(u8 max);
65  u16 U16Max(u16 max);
66  u32 U32Max(u32 max);
67  u64 U64Max(u64 max);
68 
69  s8 S8Max(s8 max);
70  s16 S16Max(s16 max);
71  s32 S32Max(s32 max);
72  s64 S64Max(s64 max);
73 
75  float FloatMax(float max);
77  double DoubleMax(double max);
78 
80  u8 U8MinMax(u8 min, u8 max);
82  u16 U16MinMax(u16 min, u16 max);
84  u32 U32MinMax(u32 min, u32 max);
86  u64 U64MinMax(u64 min, u64 max);
88  s8 S8MinMax(s8 min, s8 max);
90  s16 S16MinMax(s16 min, s16 max);
92  s32 S32MinMax(s32 min, s32 max);
94  s64 S64MinMax(s64 min, s64 max);
96  float FloatMinMax(float min, float max);
98  double DoubleMinMax(double min, double max);
99 };
100 
103 {
104 private:
105 
106  // linear random number generator
107  cRandom m_Rand;
108 
109  // cached Gaussian number
110  float m_Cache;
111  Bool m_CacheOK;
112 
113 public:
114 
116  inline u64 Seed() const { return m_Rand.Seed(); }
118  inline void SetSeed(u64 seed)
119  {
120  m_Rand.SetSeed(seed);
121  m_CacheOK = False;
122  }
123 
125  float Gauss(float mean = 0, float sigma = 1);
126 };
127 
130 {
131 private:
132 
133  // linear random number generator
134  cRandom m_Rand;
135 
136  // cached Gaussian number
137  double m_Cache;
138  Bool m_CacheOK;
139 
140 public:
141 
143  inline u64 Seed() const { return m_Rand.Seed(); }
145  inline void SetSeed(u64 seed)
146  {
147  m_Rand.SetSeed(seed);
148  m_CacheOK = False;
149  }
150 
152  double Gauss(double mean = 0, double sigma = 1);
153 };
154 
156 extern cRandom Rand;
157 
160 
163 
165 inline u64 RandSeed() { return Rand.Seed(); }
167 inline void RandSetSeed(u64 seed) { Rand.SetSeed(seed); }
168 
170 inline void RandInitSeed() { Rand.InitSeed(); }
171 
173 inline u8 RandU8() { return Rand.U8(); }
175 inline u16 RandU16() { return Rand.U16(); }
177 inline u32 RandU32() { return Rand.U32(); }
179 inline u64 RandU64() { return Rand.U64(); }
181 inline s8 RandS8() { return Rand.S8(); }
183 inline s16 RandS16() { return Rand.S16(); }
185 inline s32 RandS32() { return Rand.S32(); }
187 inline s64 RandS64() { return Rand.S64(); }
188 
190 inline float RandFloat() { return Rand.Float(); }
191 
193 inline double RandDouble() { return Rand.Double(); }
194 
196 inline u8 RandU8Max(u8 max) { return Rand.U8Max(max); }
198 inline u16 RandU16Max(u16 max) { return Rand.U16Max(max); }
200 inline u32 RandU32Max(u32 max) { return Rand.U32Max(max); }
202 inline u64 RandU64Max(u64 max) { return Rand.U64Max(max); }
204 inline s8 RandS8Max(s8 max) { return Rand.S8Max(max); }
206 inline s16 RandS16Max(s16 max) { return Rand.S16Max(max); }
208 inline s32 RandS32Max(s32 max) { return Rand.S32Max(max); }
210 inline s64 RandS64Max(s64 max) { return Rand.S64Max(max); }
211 
213 inline float RandFloatMax(float max) { return Rand.FloatMax(max); }
215 inline double RandDoubleMax(double max) { return Rand.DoubleMax(max); }
216 
218 inline u8 RandU8MinMax(u8 min, u8 max) { return Rand.U8MinMax(min, max); }
220 inline u16 RandU16MinMax(u16 min, u16 max) { return Rand.U16MinMax(min, max); }
222 inline u32 RandU32MinMax(u32 min, u32 max) { return Rand.U32MinMax(min, max); }
224 inline u64 RandU64MinMax(u64 min, u64 max) { return Rand.U64MinMax(min, max); }
226 inline s8 RandS8MinMax(s8 min, s8 max) { return Rand.S8MinMax(min, max); }
228 inline s16 RandS16MinMax(s16 min, s16 max) { return Rand.S16MinMax(min, max); }
230 inline s32 RandS32MinMax(s32 min, s32 max) { return Rand.S32MinMax(min, max); }
232 inline s64 RandS64MinMax(s64 min, s64 max) { return Rand.S64MinMax(min, max); }
233 
235 inline float RandFloatMinMax(float min, float max) { return Rand.FloatMinMax(min, max); }
237 inline double RandDoubleMinMax(double min, double max) { return Rand.DoubleMinMax(min, max); }
238 
240 inline float RandGaussF(float mean = 0, float sigma = 1) { return GaussFRand.Gauss(mean, sigma); }
242 inline double RandGaussD(double mean = 0, double sigma = 1) { return GaussDRand.Gauss(mean, sigma); }
243 
245 float Noise1D(int x, int seed);
246 
248 float Noise2D(int x, int y, int seed);
249 
251 float Noise3D(int x, int y, int z, int seed);
252 
254 float SmoothNoise1D(float x, int scale, int seed);
255 
257 float SmoothNoise2D(float x, float y, int scale, int seed);
258 
260 
261 #endif // _RAND_H
cRandom::Seed
u64 Seed() const
Get random number seed.
Definition: rand.h:39
RandS32
s32 RandS32()
Generate integer random number in full range.
Definition: rand.h:185
RandDoubleMax
double RandDoubleMax(double max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.h:215
SmoothNoise1D
float SmoothNoise1D(float x, int scale, int seed)
Interpolated 1D noise (output -1..+1, scale = 1...)
Definition: rand.cpp:401
cRandom::S16Max
s16 S16Max(s16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:218
RandFloatMinMax
float RandFloatMinMax(float min, float max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:235
RandFloat
float RandFloat()
Generate float random number in range 0 (including) to 1 (excluding)
Definition: rand.h:190
cGaussFRandom::SetSeed
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:118
cRandom::Float
float Float()
Generate float random number in range 0 (including) to 1 (excluding)
Definition: rand.cpp:78
RandU16Max
u16 RandU16Max(u16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:198
cRandom::FloatMinMax
float FloatMinMax(float min, float max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:308
cRandom::U32MinMax
u32 U32MinMax(u32 min, u32 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:278
RandS8MinMax
s8 RandS8MinMax(s8 min, s8 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:226
RandInitSeed
void RandInitSeed()
Set random seed from ROSC counter.
Definition: rand.h:170
cRandom::S32MinMax
s32 S32MinMax(s32 min, s32 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:298
RandS64
s64 RandS64()
Generate integer random number in full range.
Definition: rand.h:187
RandU64MinMax
u64 RandU64MinMax(u64 min, u64 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:224
cRandom::U16MinMax
u16 U16MinMax(u16 min, u16 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:273
cRandom::U64
u64 U64()
Generate integer random number in full range.
Definition: rand.cpp:66
RandU8MinMax
u8 RandU8MinMax(u8 min, u8 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:218
cRandom::U32Max
u32 U32Max(u32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:152
cRandom::S64Max
s64 S64Max(s64 max)
gGenerate random number in range 0 to MAX (including)
Definition: rand.cpp:242
cGaussDRandom
Gaussian random double number generator.
Definition: rand.h:129
cRandom::S16MinMax
s16 S16MinMax(s16 min, s16 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:293
Noise1D
float Noise1D(int x, int seed)
1D coordinate noise generator (output -1..+1)
Definition: rand.cpp:368
RandU32
u32 RandU32()
Generate integer random number in full range.
Definition: rand.h:177
RandU16MinMax
u16 RandU16MinMax(u16 min, u16 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:220
RandU32MinMax
u32 RandU32MinMax(u32 min, u32 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:222
cRandom::Shift
void Shift()
Shift random generator seed.
Definition: rand.h:33
cRandom::Double
double Double()
Generate double random number in range 0 (including) to 1 (excluding)
Definition: rand.cpp:88
RandS32MinMax
s32 RandS32MinMax(s32 min, s32 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:230
RandS64Max
s64 RandS64Max(s64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:210
cRandom::S32Max
s32 S32Max(s32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:230
RandSeed
u64 RandSeed()
Get random generator seed.
Definition: rand.h:165
RandGaussD
double RandGaussD(double mean=0, double sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.h:242
RandDouble
double RandDouble()
Generate double random number in range 0 (including) to 1 (excluding)
Definition: rand.h:193
RandS8
s8 RandS8()
Generate integer random number in full range.
Definition: rand.h:181
RandU32Max
u32 RandU32Max(u32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:200
cRandom::S8MinMax
s8 S8MinMax(s8 min, s8 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:288
GaussDRand
cGaussDRandom GaussDRand
Global Gaussian random double number generator.
Definition: rand.cpp:18
cGaussFRandom::Seed
u64 Seed() const
Get random number seed.
Definition: rand.h:116
RandS32Max
s32 RandS32Max(s32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:208
Noise2D
float Noise2D(int x, int y, int seed)
2D coordinate noise generator (output -1..+1)
Definition: rand.cpp:379
cGaussDRandom::Gauss
double Gauss(double mean=0, double sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.cpp:343
RandSetSeed
void RandSetSeed(u64 seed)
Set random generator seed.
Definition: rand.h:167
cRandom::U32
u32 U32()
Generate integer random number in full range.
Definition: rand.cpp:56
cRandom::U8
u8 U8()
Generate integer random number in full range.
Definition: rand.cpp:36
RandS16MinMax
s16 RandS16MinMax(s16 min, s16 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:228
Noise3D
float Noise3D(int x, int y, int z, int seed)
3D coordinate noise generator (output -1..+1)
Definition: rand.cpp:390
GaussFRand
cGaussFRandom GaussFRand
Global Gaussian random float number generator.
Definition: rand.cpp:15
cGaussFRandom
Gaussian random float number generator.
Definition: rand.h:102
cRandom::InitSeed
void InitSeed()
Set random seed from ROSC counter.
Definition: rand.cpp:24
cRandom
Random Generator.
Definition: rand.h:23
cRandom::U64MinMax
u64 U64MinMax(u64 min, u64 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:283
RandS8Max
s8 RandS8Max(s8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:204
cGaussDRandom::SetSeed
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:145
RandS16Max
s16 RandS16Max(s16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:206
Rand
cRandom Rand
Global random generator.
Definition: rand.cpp:12
RandS16
s16 RandS16()
Generate integer random number in full range.
Definition: rand.h:183
SmoothNoise2D
float SmoothNoise2D(float x, float y, int scale, int seed)
Interpolated 2D noise (output -1..+1, scale = 1...)
Definition: rand.cpp:436
cRandom::U16
u16 U16()
Generate integer random number in full range.
Definition: rand.cpp:46
RandU16
u16 RandU16()
Generate integer random number in full range.
Definition: rand.h:175
cRandom::U8Max
u8 U8Max(u8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:98
cRandom::U8MinMax
u8 U8MinMax(u8 min, u8 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:268
cRandom::FloatMax
float FloatMax(float max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.cpp:254
cGaussDRandom::Seed
u64 Seed() const
Get random number seed.
Definition: rand.h:143
cRandom::U64Max
u64 U64Max(u64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:179
cRandom::S64MinMax
s64 S64MinMax(s64 min, s64 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:303
cRandom::S8Max
s8 S8Max(s8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:206
RandS64MinMax
s64 RandS64MinMax(s64 min, s64 max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:232
cRandom::DoubleMinMax
double DoubleMinMax(double min, double max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.cpp:313
RandDoubleMinMax
double RandDoubleMinMax(double min, double max)
Generate random number in range MIN to MAX (including). If MIN > MAX, then number is generated out of...
Definition: rand.h:237
cRandom::SetSeed
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:42
cRandom::U16Max
u16 U16Max(u16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:125
RandGaussF
float RandGaussF(float mean=0, float sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.h:240
cGaussFRandom::Gauss
float Gauss(float mean=0, float sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.cpp:322
RandU64
u64 RandU64()
Generate integer random number in full range.
Definition: rand.h:179
RandU8Max
u8 RandU8Max(u8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:196
RandFloatMax
float RandFloatMax(float max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.h:213
RandU8
u8 RandU8()
Generate integer random number in full range.
Definition: rand.h:173
cRandom::DoubleMax
double DoubleMax(double max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.cpp:260
RandU64Max
u64 RandU64Max(u64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:202