PicoVGA  1.2-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 
23 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
Gaussian random double number generator.
Definition: rand.h:130
double Gauss(double mean=0, double sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.cpp:343
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:145
u64 Seed() const
Get random number seed.
Definition: rand.h:143
Gaussian random float number generator.
Definition: rand.h:103
u64 Seed() const
Get random number seed.
Definition: rand.h:116
float Gauss(float mean=0, float sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.cpp:322
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:118
Random Generator.
Definition: rand.h:24
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
u8 U8()
Generate integer random number in full range.
Definition: rand.cpp:36
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
s32 S32()
Generate integer random number in full range.
Definition: rand.h:54
u16 U16Max(u16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:125
u32 U32()
Generate integer random number in full range.
Definition: rand.cpp:56
s64 S64()
Generate integer random number in full range.
Definition: rand.h:55
void InitSeed()
Set random seed from ROSC counter.
Definition: rand.cpp:24
s32 S32Max(s32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:230
double DoubleMax(double max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.cpp:260
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
u64 Seed() const
Get random number seed.
Definition: rand.h:39
s64 S64Max(s64 max)
gGenerate random number in range 0 to MAX (including)
Definition: rand.cpp:242
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
float FloatMax(float max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.cpp:254
u16 U16()
Generate integer random number in full range.
Definition: rand.cpp:46
void Shift()
Shift random generator seed.
Definition: rand.h:33
s16 S16()
Generate integer random number in full range.
Definition: rand.h:53
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
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
float Float()
Generate float random number in range 0 (including) to 1 (excluding)
Definition: rand.cpp:78
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
u32 U32Max(u32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:152
s16 S16Max(s16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:218
u8 U8Max(u8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:98
void SetSeed(u64 seed)
Set random number seed.
Definition: rand.h:42
u64 U64()
Generate integer random number in full range.
Definition: rand.cpp:66
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
double Double()
Generate double random number in range 0 (including) to 1 (excluding)
Definition: rand.cpp:88
s8 S8()
Generate integer random number in full range.
Definition: rand.h:52
u64 U64Max(u64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:179
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
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
s8 S8Max(s8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.cpp:206
u32 RandU32Max(u32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:200
u64 RandU64Max(u64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:202
u8 RandU8Max(u8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:196
double RandDoubleMax(double max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.h:215
float SmoothNoise1D(float x, int scale, int seed)
Interpolated 1D noise (output -1..+1, scale = 1...)
Definition: rand.cpp:401
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
s32 RandS32Max(s32 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:208
u16 RandU16Max(u16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:198
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
u16 RandU16()
Generate integer random number in full range.
Definition: rand.h:175
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
u32 RandU32()
Generate integer random number in full range.
Definition: rand.h:177
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
double RandGaussD(double mean=0, double sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.h:242
s64 RandS64()
Generate integer random number in full range.
Definition: rand.h:187
void RandSetSeed(u64 seed)
Set random generator seed.
Definition: rand.h:167
cGaussDRandom GaussDRand
Global Gaussian random double number generator.
Definition: rand.cpp:18
u8 RandU8()
Generate integer random number in full range.
Definition: rand.h:173
s16 RandS16()
Generate integer random number in full range.
Definition: rand.h:183
float Noise3D(int x, int y, int z, int seed)
3D coordinate noise generator (output -1..+1)
Definition: rand.cpp:390
s64 RandS64Max(s64 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:210
s32 RandS32()
Generate integer random number in full range.
Definition: rand.h:185
u64 RandSeed()
Get random generator seed.
Definition: rand.h:165
cRandom Rand
Global random generator.
Definition: rand.cpp:12
double RandDouble()
Generate double random number in range 0 (including) to 1 (excluding)
Definition: rand.h:193
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
cGaussFRandom GaussFRand
Global Gaussian random float number generator.
Definition: rand.cpp:15
s8 RandS8Max(s8 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:204
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
u64 RandU64()
Generate integer random number in full range.
Definition: rand.h:179
float Noise2D(int x, int y, int seed)
2D coordinate noise generator (output -1..+1)
Definition: rand.cpp:379
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
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
s16 RandS16Max(s16 max)
Generate random number in range 0 to MAX (including)
Definition: rand.h:206
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
void RandInitSeed()
Set random seed from ROSC counter.
Definition: rand.h:170
s8 RandS8()
Generate integer random number in full range.
Definition: rand.h:181
float RandGaussF(float mean=0, float sigma=1)
Generate Gaussian random number (mean = center, sigma = width)
Definition: rand.h:240
float RandFloatMax(float max)
Generate decimal random number in range 0 (including) to MAX (excluding)
Definition: rand.h:213
float Noise1D(int x, int seed)
1D coordinate noise generator (output -1..+1)
Definition: rand.cpp:368
float SmoothNoise2D(float x, float y, int scale, int seed)
Interpolated 2D noise (output -1..+1, scale = 1...)
Definition: rand.cpp:436
float RandFloat()
Generate float random number in range 0 (including) to 1 (excluding)
Definition: rand.h:190
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