Visual Servoing Platform  version 3.6.1 under development (2024-04-25)
vpGaussRand.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4  *
5  * This software is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See https://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Generation of random number with uniform and normal probability density.
32  */
33 
34 #ifndef vpGaussRand_hh
35 #define vpGaussRand_hh
36 
37 #include <visp3/core/vpConfig.h>
38 #include <visp3/core/vpUniRand.h>
39 
115 class VISP_EXPORT vpGaussRand
116 {
117 private:
118  double gaussianDraw();
119 
120  vpUniRand m_rng;
121  double m_mean;
122  double m_sigma;
123  bool m_AlreadyDone;
124  double m_x2;
125 
126 public:
130  vpGaussRand() : m_rng(), m_mean(0), m_sigma(0), m_AlreadyDone(false), m_x2(0) {}
131 
139  vpGaussRand(double sigma_val, double mean_val, long noise_seed = 0)
140  : m_rng(noise_seed), m_mean(mean_val), m_sigma(sigma_val), m_AlreadyDone(false), m_x2(0)
141  {
142  }
143 
150  void setSigmaMean(double sigma_val, double mean_val)
151  {
152  m_mean = mean_val;
153  m_sigma = sigma_val;
154  }
155 
161  void seed(long seed_val) { m_rng.setSeed(seed_val, 0x123465789ULL); }
162 
166  double operator()() { return m_sigma * gaussianDraw() + m_mean; }
167 };
168 
169 #endif
Class for generating random number with normal probability density.
Definition: vpGaussRand.h:116
void setSigmaMean(double sigma_val, double mean_val)
Definition: vpGaussRand.h:150
vpGaussRand(double sigma_val, double mean_val, long noise_seed=0)
Definition: vpGaussRand.h:139
double operator()()
Definition: vpGaussRand.h:166
void seed(long seed_val)
Definition: vpGaussRand.h:161
Class for generating random numbers with uniform probability density.
Definition: vpUniRand.h:123
void setSeed(uint64_t initstate, uint64_t initseq)
Definition: vpUniRand.cpp:202