这篇是师兄的一篇杰作,特意转过来,因为以后也要用到,到时候就没必要自己去写了。实为偷懒,但也是为了能够更快的解决问题。原文: http://hi.baidu.com/davy_hwang/item/6c14bfd0a736823149e1dd57
1 #pragma once 2 #include <ctime> 3 const unsigned long maxshort = 65535L; 4 const unsigned long multiplier = 1194211693L; 5 const unsigned long adder = 12345L; 6 class RandomNumber{ 7 private: 8 // 当前种子 9 unsigned long randSeed; 10 public: 11 // 构造函数,默认值0表示由系统自动产生种子 12 RandomNumber(unsigned long s = 0); 13 // 产生0 ~ n-1之间的随机整数 14 unsigned int Random(unsigned long n); 15 // 产生[0, 1) 之间的随机实数 16 double fRandom(); 17 }; 18 // 产生种子 19 RandomNumber::RandomNumber(unsigned long s) 20 { 21 if(s == 0) 22 randSeed = (unsigned long)time(0); //用系统时间产生种子 23 else 24 randSeed = s; 25 } 26 // 产生0 ~ n-1 之间的随机整数 27 unsigned int RandomNumber::Random(unsigned long n) 28 { 29 randSeed = multiplier * randSeed + adder; 30 return (unsigned int)((randSeed) % n); 31 } 32 // 产生[0, 1)之间的随机实数 33 double RandomNumber::fRandom() 34 { 35 return Random(maxshort) / double(maxshort); 36 } 37 38 // --------------------------------------- test: 39 #include <iostream> 40 #include "Rdm.h" 41 #include <fstream> 42 using namespace std; 43 int main() 44 { 45 ofstream ofRet("Nodes.tr"); 46 RandomNumber obj; 47 int Loc_x = 0; 48 int Loc_y = 0; 49 for ( int i = 0; i < 100; i++ ) 50 { 51 Loc_x = obj.Random(600); 52 Loc_y = obj.Random(600); 53 ofRet << "-MN " << i << " -X " << Loc_x << " -Y " << Loc_y << endl; 54 } 55 return 0; 56 }
将结果输入到matlAB可以得到如下的随机分布图,是不是很nice。nice归nice,过程还要自己去走一遍。