C++RNG类与毛星云寻找凸包例程的理解

本文深入探讨了C++中RNG类的使用方法,包括如何通过系统时间初始化随机种子以生成不可预测的随机数,以及uniform函数在指定范围内生成随机数的应用。同时,对比了RNG与c中rand函数的异同,解析了RNG类在OpenCV中的应用及如何避免重复随机数的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RNG类
RNG类是C++中产生随机数的。它和c中的rand有异曲同工之妙。产生的都是伪随机数。随机类RNG:计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值,所以只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。pencv 里RNG类构造函数初始化为固定值后,随机种子也是固定的,所以在相同的平台环境下,编译后每次运行它,显示的随机数是一样的。
怎么解决这个问题呢?
添加头文件#include
RNG rng((unsigned)time(NULL));利用系统时间作为随机数种子,这样每次的随机数种子不同,产生的随机数也不同。
uniform函数可以返回指定范围的随机数。主要用来生成一个[a,b)范围内的指定类型一个随机数。
int uniform(int a, int b);
float uniform(float a, float b);
double uniform(double a, double b);

vector points;点向量。points[i]为点集合里面的任一点都可以。points[hull[i]]表示构成凸包边的某点(因为凸包是一个点集合最外面的点连接起来的区域)
int hullcount = (int)hull.size();//返回凸包的边数(因为只有一个凸包,而凸包是由边构成的序列,所以返回序列长度,应该返回的是边的个数)

以下是自己的理解:
查看RNG类的源代码,发现RNG类可以产生多种类型的随机数,故使用时需要指定是哪种类型的。
RNG rng;
unsigned int counter = static_cast(rng)%100+3;例如这样,才对。不然,编译器会报错。

对vector的进一步理解:
拿vector<vector>和vector举个例子:
vector<vector>和vector的区别,前者是二维数组,后者是一维数组。
在寻找轮廓函数findContours中,找到的轮廓都会存在第二个参数contours中,而首先轮廓为多个,其次轮廓是一系列点的合集,所以不难想到,使用的是二维点向量vector<vector> contours;对于寻找凸包函数convexHull函数,第一个参量为输入的二维点集,第一个参量为找到的凸包。首先point本来就由(x,y)组成,所以只需要一个一维数组,只是每个数据代表一个(x,y)。找到的凸包也是这样,凸包只有一个,一个一维数组里面存下凸包的各个边。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值