corelib
src
rtflann
util
random.h
Go to the documentation of this file.
1
/***********************************************************************
2
* Software License Agreement (BSD License)
3
*
4
* Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved.
5
* Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved.
6
*
7
* THE BSD LICENSE
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions
11
* are met:
12
*
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
*************************************************************************/
30
31
#ifndef RTABMAP_FLANN_RANDOM_H
32
#define RTABMAP_FLANN_RANDOM_H
33
34
#include <algorithm>
35
#include <cstdlib>
36
#include <cstddef>
37
#include <vector>
38
#include <random>
39
40
#include "
rtflann/general.h
"
41
42
namespace
rtflann
43
{
44
49
inline
void
seed_random
(
unsigned
int
seed)
50
{
51
srand(seed);
52
}
53
54
/*
55
* Generates a random double value.
56
*/
63
inline
double
rand_double
(
double
high = 1.0,
double
low = 0)
64
{
65
return
low + ((high-low) * (std::rand() / (RAND_MAX + 1.0)));
66
}
67
74
inline
int
rand_int
(
int
high = RAND_MAX,
int
low = 0)
75
{
76
return
low + (
int
) (
double
(high-low) * (std::rand() / (RAND_MAX + 1.0)));
77
}
78
79
84
class
UniqueRandom
85
{
86
std::vector<int>
vals_
;
87
int
size_
;
88
int
counter_
;
89
90
public
:
96
UniqueRandom
(
int
n
)
97
{
98
init
(
n
);
99
}
100
105
void
init
(
int
n)
106
{
107
// create and initialize an array of size n
108
vals_
.resize(n);
109
size_
=
n
;
110
for
(
int
i = 0;
i
<
size_
; ++
i
)
vals_
[i] = i;
111
112
// shuffle the elements in the array
113
std::random_device rd;
114
std::mt19937
g
(rd());
115
std::shuffle(
vals_
.begin(),
vals_
.end(), g);
116
117
counter_
= 0;
118
}
119
125
int
next
()
126
{
127
if
(
counter_
==
size_
) {
128
return
-1;
129
}
130
else
{
131
return
vals_
[
counter_
++];
132
}
133
}
134
};
135
136
}
137
138
#endif //FLANN_RANDOM_H
139
140
int
int
general.h
rtflann::UniqueRandom::next
int next()
Definition:
random.h:153
rtflann::UniqueRandom::init
void init(int n)
Definition:
random.h:133
n
int n
rtflann::UniqueRandom::UniqueRandom
UniqueRandom(int n)
Definition:
random.h:124
rtflann::rand_int
int rand_int(int high=RAND_MAX, int low=0)
Definition:
random.h:102
rtflann::seed_random
void seed_random(unsigned int seed)
Definition:
random.h:77
g
float g
rtflann::UniqueRandom::counter_
int counter_
Definition:
random.h:116
rtflann::rand_double
double rand_double(double high=1.0, double low=0)
Definition:
random.h:91
rtflann::UniqueRandom::size_
int size_
Definition:
random.h:115
rtflann::UniqueRandom::vals_
std::vector< int > vals_
Definition:
random.h:114
rtflann
Definition:
all_indices.h:49
i
int i
rtabmap
Author(s): Mathieu Labbe
autogenerated on Thu Jul 25 2024 02:50:15