Visual Servoing Platform
version 3.2.0 under development (2019-01-22)
Main Page
Related Pages
Modules
Namespaces
Classes
Examples
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
static
bool
AlreadyDone =
false
;
52
static
double
x2;
53
54
if
(AlreadyDone) {
55
AlreadyDone =
false
;
56
return
x2;
57
}
58
59
else
{
60
double
v1 = 0, v2 = 0, rsq = 0;
61
do
{
62
v1 = 2 *
draw1
() - 1;
63
v2 = 2 *
draw1
() - 1;
64
rsq = v1 * v1 + v2 * v2;
65
}
while
(rsq >= 1);
66
67
double
fac = sqrt(-2 * log(rsq) / rsq);
68
x2 = v2 * fac;
69
AlreadyDone =
true
;
70
return
v1 * fac;
71
}
72
}
vpUniRand::draw1
double draw1()
Definition:
vpUniRand.cpp:62
local
soft
visp
ViSP-web-script
visp
modules
core
src
math
random-generator
vpGaussRand.cpp
Generated by
1.8.11