JUCE类库之Random详解

Random类可生成整型、浮点型、bool型、BigInteger大整数类型的(伪)随机数。可直接使用其静态方法getSystemRandom()获取一个整型(伪)随机数:

// 返回0到maxValue(不含)之间的一个随机整数
Random::getSystemRandom().nextInt(maxValue); 

基于非固定的“种子”可得到更“随机”而不可预测的随机数(伪随机数皆可预测)。此时需实例化一个Random对象:

/* Time::currentTimeMillis()返回1970年1月1日0时0分0秒至今的毫秒数,类型为long long。该类型在JUCE中定义为独立于平台的64位整型:int64 */
Random*  random = new Random (Time::currentTimeMillis());
int64 aValue = random->nextInt64();

 获取一个double随机值(数值范围:0.0~1.0)。为方便使用,可乘以10或100:

double tmpDouble = Random::getSystemRandom().nextDouble() * 100.0;

 随机获取m~n(本例为10~25)之间的某个整数

int i = Random::getSystemRandom().nextInt (16) + 10;

 随机获取一个亮颜色(1参为随机获取的HUE颜色值,2参为饱和度,3参为亮度,4参为不透明度):

Colour cl = Colour (Random::getSystemRandom().nextFloat(), 0.1f, 0.97f, 1.0f);
// 设置随机颜色和随机大小
Colour randomClr (r.nextFloat(), r.nextFloat(), r.nextFloat(), r.nextFloat());
g.setColour (randomClr); 

const int width = r.nextInt (getWidth() / 4); 
const int height = r.nextInt (getHeight() / 4); 
const int left = r.nextInt (getWidth() - width); 
const int top = r.nextInt (getHeight() - height);

利用随机产生的数值,可实现许多丰富多彩、绝不单调的功能。Random类无虚函数,其重要的成员函数有:
 Random (int64 seedValue) 基于种子值创建一个随机数对象
 nextInt () 获取一个32位int随机数,该数小于给出的参数值
 nextInt64 () 获取一个64位int64随机数
 nextFloat () 获取一个float随机数
 nextDouble () 获取一个double随机数.
 nextBool () 获取一个bool随机值
 nextLargeNumber () 获取一个BigInteger随机数
 setSeed () 基于给出的种子值重置此对象
 combineSeed () 用给出的值合并此对象的种子
 setSeedRandomly () 基于当前时间和当前的种子值设置新种子值

Random类的静态函数:
 getSystemRandom () 返回本类对象。可用返回的对象调用本类的有关函数获取随机值