Visual Servoing Platform
version 3.3.0
vpGaussRand.cpp
1
/****************************************************************************
2
*
3
* ViSP, open source Visual Servoing Platform software.
4
* Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5
*
6
* This software is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
* See the file LICENSE.txt at the root directory of this source
11
* distribution for additional information about the GNU GPL.
12
*
13
* For using ViSP with software that can not be combined with the GNU
14
* GPL, please contact Inria about acquiring a ViSP Professional
15
* Edition License.
16
*
17
* See http://visp.inria.fr for more information.
18
*
19
* This software was developed at:
20
* Inria Rennes - Bretagne Atlantique
21
* Campus Universitaire de Beaulieu
22
* 35042 Rennes Cedex
23
* France
24
*
25
* If you have questions regarding the use of this file, please contact
26
* Inria at visp@inria.fr
27
*
28
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30
*
31
* Description:
32
* Generation of random number with uniform and normal probability density.
33
*
34
* Authors:
35
* Eric Marchand
36
*
37
*****************************************************************************/
38
39
#include <math.h>
40
#include <visp3/core/vpGaussRand.h>
41
49
double
vpGaussRand::gaussianDraw()
50
{
51
if
(m_AlreadyDone) {
52
m_AlreadyDone =
false
;
53
return
m_x2;
54
}
55
56
else
{
57
double
v1 = 0, v2 = 0, rsq = 0;
58
do
{
59
v1 = 2 * m_rng.
uniform
(0.0, 1.0) - 1;
60
v2 = 2 * m_rng.
uniform
(0.0, 1.0) - 1;
61
rsq = v1 * v1 + v2 * v2;
62
}
while
(rsq >= 1);
63
64
double
fac = sqrt(-2 * log(rsq) / rsq);
65
m_x2 = v2 * fac;
66
m_AlreadyDone =
true
;
67
return
v1 * fac;
68
}
69
}
vpUniRand::uniform
int uniform(int a, int b)
Definition:
vpUniRand.cpp:162
modules
core
src
math
random-generator
vpGaussRand.cpp
Generated by
1.8.16