1. 程式人生 > 實用技巧 >Boost Random

Boost Random

#include "MainScene.h"
#include "SimpleAudioEngine.h"
#include <iostream>
#include <string.h>
using namespace std;

#include "opencv.hpp"
#include <opencv2/features2d.hpp>
#include "opencv2/highgui.hpp"
using namespace cv;

extern "C"
{
#include "SDL.h"

#include <libavutil/imgutils.h>
#include 
<libavutil/parseutils.h> #include <libswscale/swscale.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavformat/avio.h> #include <libavutil/file.h> #include <libavdevice/avdevice.h> } #include <boost/random.hpp> #include <boost/random/random_device.hpp> Scene
* MainScene::createScene() { return MainScene::create(); } bool MainScene::init() { if ( !Scene::init() ) { return false; } visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //string filename = "I:/ImageGrid/135708z4u8eha6gucne2ug.jpg";
//string filename = "D:/PriPro/Pro/simulator/win32/src/client/res/log/Log_1.png"; string filename = "H:/libcocos2d-x/res/201212211612386.jpg"; auto s = Sprite::create("201212211612386.jpg"); s->setScale(0.5); s->setPosition3D(Vec3(400, 300, -300)); this->addChild(s); //1、隨機數發生器:boost::random::mt19937,生成偽隨機數 //產生隨機數型別:boost::uint32_t { std::time_t now = std::time(0); boost::random::mt19937 gen(now); //輸出最大值和最小值 //std::cout << boost::random::mt19937::min() << ":" << boost::random::mt19937::max() << std::endl; //產生5個隨機數, for (int i = 0; i < 5; ++i) { std::cout << gen() << "-"; } //std::cout << std::endl; //產生5個隨機數,並填充容器 std::vector<int> vec(5); gen.generate(vec.begin(), vec.end()); for (auto& i : vec) { std::cout << " 隨機數發生器:boost::random::mt19937,生成偽隨機數 "<< i << "-"; } std::cout << std::endl; } //2、隨機數發生器 + 隨機數分佈器: //實現的是符合某個特定的區域或符合某種分佈的隨機數 { //伯努利分佈:在0/1中隨機產生一個數,就像拋硬幣,不是0,就是1,但是是隨機的。 //定義一個隨機數生成器 boost::random::mt19937 gen(time(0)); //定義一個隨機數分佈器 boost::random::bernoulli_distribution<> dist; //測試產生隨機數 for (int i = 0; i < 10; ++i) { std::cout <<"隨機數發生器 + 隨機數分佈器: "<< dist(gen) << std::endl; } } { //產生某個整數域範圍內的隨機數,比如產生0~100之間的隨機數 //定義一個隨機數生成器 boost::random::mt19937 gen(time(0)); boost::random::uniform_int_distribution<> dist(0, 100); //測試產生隨機數 for (int i = 0; i < 10; ++i) { std::cout << "產生某個整數域範圍內的隨機數 "<<dist(gen) << std::endl; } } { //產生0~1之間的小數 //定義一個隨機數生成器 boost::random::mt19937 gen(time(0)); boost::random::uniform_01<> dist; //測試產生隨機數 for (int i = 0; i < 10; ++i) { std::cout << "產生0~1之間的小數 "<<dist(gen) << std::endl; } } { //小整數域上的均勻分佈 boost::random::mt19937 gen(time(0)); boost::random::uniform_smallint<> dist(1, 100); //測試產生隨機數 for (int i = 0; i < 10; ++i) { std::cout <<"小整數域上的均勻分佈 "<< dist(gen) << std::endl; } } { //實現了任意區間的實數分佈隨機數,型別是double型別 boost::random::mt19937 gen(time(0)); boost::random::uniform_real_distribution<> dist(1.0, 100.0); //測試產生隨機數 for (int i = 0; i < 10; ++i) { std::cout << " 任意區間的實數分佈隨機數 "<<dist(gen) << std::endl; } } //3.變數發生器,作用:只是為了方便使用 //是隨機數發生器和分佈器的組合,示例: { //定義一個隨機數發生器 boost::random::mt19937 mt(time(0)); //定義一個隨機數分佈器 boost::random::uniform_smallint<> us(1, 100); //定義一個變數發生器,注意:引數2分佈器的引數形式不能是指標或是引用! boost::random::variate_generator<boost::random::mt19937&, boost::random::uniform_smallint<> > gen(mt, us); //測試生成10隨機數 for (int i = 0; i < 10; ++i) { std::cout << "變數發生器,作用:只是為了方便使用 "<<gen() << std::endl; } } //4、隨機數生成器:random_device,真隨機數 { //最大最小值: std::cout << boost::random::random_device::min() << ":" << boost::random::random_device::max() << std::endl; boost::random::random_device gen; for (int i = 0; i < 20; ++i) { std::cout <<"隨機數生成器:random_device,真隨機數 "<< gen() << std::endl; } } return true; }

結果

H:\libcocos2d-x\build\Debug>libcocos.exe
Ready for GLSL
Ready for OpenGL 2.0

{
gl.version: 4.6.13559 Compatibility Profile Context 26.20.12028.2
gl.supports_NPOT: true
cocos2d.x.version: cocos2d-x-3.17.2
cocos2d.x.compiled_with_profiler: false
cocos2d.x.build_type: DEBUG
cocos2d.x.compiled_with_gl_state_cache: true
gl.max_texture_size: 16384
gl.supports_OES_packed_depth_stencil: false
gl.vendor: ATI Technologies Inc.
gl.renderer: AMD Radeon RX 580 2048SP
gl.max_texture_units: 160
gl.supports_ETC1: false
gl.supports_S3TC: true
gl.supports_ATITC: false
gl.supports_PVRTC: false
gl.supports_BGRA8888: false
gl.supports_discard_framebuffer: false
gl.supports_vertex_array_object: true
gl.supports_OES_map_buffer: false
gl.supports_OES_depth24: false
}


536369200-340623271-4276119838-1931111883-4078776906- 隨機數發生器:boost::random::mt19937,生成偽隨機數 1938412408- 隨機數發生器:boost::random::mt19937,生成偽隨機數 919002582- 隨機數發生器:boost::random::mt19937,生成偽隨機數 -404798720- 隨機數發生器:boost::random::mt19937,生成偽隨機數 -277944272- 隨機數發生器:boost::random::mt19937,生成偽隨機數 -328668786-
隨機數發生器 + 隨機數分佈器: 1
隨機數發生器 + 隨機數分佈器: 1
隨機數發生器 + 隨機數分佈器: 0
隨機數發生器 + 隨機數分佈器: 1
隨機數發生器 + 隨機數分佈器: 0
隨機數發生器 + 隨機數分佈器: 1
隨機數發生器 + 隨機數分佈器: 1
隨機數發生器 + 隨機數分佈器: 0
隨機數發生器 + 隨機數分佈器: 0
隨機數發生器 + 隨機數分佈器: 0
產生某個整數域範圍內的隨機數 12
產生某個整數域範圍內的隨機數 8
產生某個整數域範圍內的隨機數 100
產生某個整數域範圍內的隨機數 45
產生某個整數域範圍內的隨機數 95
產生某個整數域範圍內的隨機數 45
產生某個整數域範圍內的隨機數 21
產生某個整數域範圍內的隨機數 91
產生某個整數域範圍內的隨機數 94
產生某個整數域範圍內的隨機數 93
產生0~1之間的小數 0.124883
產生0~1之間的小數 0.0793075
產生0~1之間的小數 0.995612
產生0~1之間的小數 0.449622
產生0~1之間的小數 0.949664
產生0~1之間的小數 0.451322
產生0~1之間的小數 0.213972
產生0~1之間的小數 0.90575
產生0~1之間的小數 0.935286
產生0~1之間的小數 0.923476
小整數域上的均勻分佈 1
小整數域上的均勻分佈 72
小整數域上的均勻分佈 39
小整數域上的均勻分佈 84
小整數域上的均勻分佈 7
小整數域上的均勻分佈 9
小整數域上的均勻分佈 83
小整數域上的均勻分佈 77
小整數域上的均勻分佈 25
小整數域上的均勻分佈 11
任意區間的實數分佈隨機數 13.3634
任意區間的實數分佈隨機數 8.85145
任意區間的實數分佈隨機數 99.5656
任意區間的實數分佈隨機數 45.5126
任意區間的實數分佈隨機數 95.0168
任意區間的實數分佈隨機數 45.6809
任意區間的實數分佈隨機數 22.1832
任意區間的實數分佈隨機數 90.6693
任意區間的實數分佈隨機數 93.5933
任意區間的實數分佈隨機數 92.4241
變數發生器,作用:只是為了方便使用 1
變數發生器,作用:只是為了方便使用 72
變數發生器,作用:只是為了方便使用 39
變數發生器,作用:只是為了方便使用 84
變數發生器,作用:只是為了方便使用 7
變數發生器,作用:只是為了方便使用 9
變數發生器,作用:只是為了方便使用 83
變數發生器,作用:只是為了方便使用 77
變數發生器,作用:只是為了方便使用 25
變數發生器,作用:只是為了方便使用 11
0:4294967295
隨機數生成器:random_device,真隨機數 3184181887
隨機數生成器:random_device,真隨機數 1839758307
隨機數生成器:random_device,真隨機數 930484113
隨機數生成器:random_device,真隨機數 2087181485
隨機數生成器:random_device,真隨機數 901289463
隨機數生成器:random_device,真隨機數 2204950096
隨機數生成器:random_device,真隨機數 1487585537
隨機數生成器:random_device,真隨機數 1386460697
隨機數生成器:random_device,真隨機數 2340326506
隨機數生成器:random_device,真隨機數 596825156
隨機數生成器:random_device,真隨機數 2696036027
隨機數生成器:random_device,真隨機數 380201607
隨機數生成器:random_device,真隨機數 3070663986
隨機數生成器:random_device,真隨機數 2850338511
隨機數生成器:random_device,真隨機數 1854585580
隨機數生成器:random_device,真隨機數 464957364
隨機數生成器:random_device,真隨機數 2378991457
隨機數生成器:random_device,真隨機數 3082276196
隨機數生成器:random_device,真隨機數 3170197326
隨機數生成器:random_device,真隨機數 646490642
cocos2d: QuadCommand: resizing index size from [-1] to [2560]