随机数产生器RNG
一、RNG::RNG (构造函数)
形式一
RNG::RNG()
形式二
RNG::RNG(uint64 state)
参数:
state – 用于初始化RNG的64位值
上面的两个形式都是RNG的构造函数。
第一种形式将状态设置为某个预定义值,等于 232 - 1。
第二种形式将状态设置为指定的值。但如果你传递的参数为 0,那将使用第一种形式来避免奇异的随机数序列(全为0)
二、RNG::next – 返回下一个随机数的值
unsigned int RNG::next()
该方法使用MWC算法更新状态并返回下一个32位随机数。
void QuickDemo::random_drwing()
{
RNG rng;
while (true)
{
int c = waitKey(1000);
if (c == 27)
{
break;
}
int b = rng.next();
cout << b << endl;
}
}
三、RNG::next – 返回下一个随机数的值
int RNG::uniform(int a, int b)
float RNG::uniform(float a, float b)
double RNG::uniform(double a, double b)
返回从均匀分布[a,b)中抽样的下一个随机数。
Parameters:
a – 下边界(包含)
b – 上边界(不包含)
运用上面的随机函数做一个测试:
#include <iostream>
#include "15_opencv_mat.h"
using namespace std;
void QuickDemo::random_drwing()
{
Mat canvas = Mat::zeros(Size(512,512),CV_8UC3);
int w = canvas.cols;
int h = canvas.rows;
RNG rng;
while (true)
{
int c = waitKey(100);
if (c == 27)
{
break;
}
int x1 = rng.uniform(0, w);//在[0, w)中产生一个随机数
int y1 = rng.uniform(0, h);
int x2 = rng.uniform(0, w);
int y2 = rng.uniform(0, h);
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);//在[0, 255)中产生一个随机数
//canvas = Scalar(0, 0, 0);//当每次只显示一条线段时取消注释
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 2, LINE_AA, 0);
imshow("随机绘制演示", canvas);
}
}
运行结果如下: