|
|
|
@ -40,13 +40,31 @@ |
|
|
|
|
namespace cvflann |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
inline int rand() |
|
|
|
|
{ |
|
|
|
|
#ifndef OPENCV_FLANN_USE_STD_RAND |
|
|
|
|
# if INT_MAX == RAND_MAX |
|
|
|
|
int v = cv::theRNG().next() & INT_MAX; |
|
|
|
|
# else |
|
|
|
|
int v = cv::theRNG().uniform(0, RAND_MAX + 1); |
|
|
|
|
# endif |
|
|
|
|
#else |
|
|
|
|
int v = std::rand(); |
|
|
|
|
#endif // OPENCV_FLANN_USE_STD_RAND
|
|
|
|
|
return v; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Seeds the random number generator |
|
|
|
|
* @param seed Random seed |
|
|
|
|
*/ |
|
|
|
|
inline void seed_random(unsigned int seed) |
|
|
|
|
{ |
|
|
|
|
srand(seed); |
|
|
|
|
#ifndef OPENCV_FLANN_USE_STD_RAND |
|
|
|
|
cv::theRNG() = cv::RNG(seed); |
|
|
|
|
#else |
|
|
|
|
std::srand(seed); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -60,7 +78,7 @@ inline void seed_random(unsigned int seed) |
|
|
|
|
*/ |
|
|
|
|
inline double rand_double(double high = 1.0, double low = 0) |
|
|
|
|
{ |
|
|
|
|
return low + ((high-low) * (std::rand() / (RAND_MAX + 1.0))); |
|
|
|
|
return low + ((high-low) * (rand() / (RAND_MAX + 1.0))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -71,7 +89,7 @@ inline double rand_double(double high = 1.0, double low = 0) |
|
|
|
|
*/ |
|
|
|
|
inline int rand_int(int high = RAND_MAX, int low = 0) |
|
|
|
|
{ |
|
|
|
|
return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0))); |
|
|
|
|
return low + (int) ( double(high-low) * (rand() / (RAND_MAX + 1.0))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -107,7 +125,11 @@ public: |
|
|
|
|
for (int i = 0; i < size_; ++i) vals_[i] = i; |
|
|
|
|
|
|
|
|
|
// shuffle the elements in the array
|
|
|
|
|
#ifndef OPENCV_FLANN_USE_STD_RAND |
|
|
|
|
cv::randShuffle(vals_); |
|
|
|
|
#else |
|
|
|
|
std::random_shuffle(vals_.begin(), vals_.end()); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
counter_ = 0; |
|
|
|
|
} |
|
|
|
|