00001 /* 00002 ------------------------------------------------------------------- 00003 00004 Copyright (C) 2006, 2007, 2008, 2009, Andrew W. Steiner 00005 00006 This file is part of O2scl. 00007 00008 O2scl is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 3 of the License, or 00011 (at your option) any later version. 00012 00013 O2scl is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with O2scl. If not, see <http://www.gnu.org/licenses/>. 00020 00021 ------------------------------------------------------------------- 00022 */ 00023 #ifndef O2SCL_GAUSSIAN_2D_H 00024 #define O2SCL_GAUSSIAN_2D_H 00025 00026 #include <o2scl/rnga.h> 00027 00028 #ifndef DOXYGENP 00029 namespace o2scl { 00030 #endif 00031 00032 /** 00033 \brief Generate two random numbers from a normal distribution 00034 00035 \todo Double check that sigma is implemented correctly 00036 */ 00037 template<class rng_t> class gaussian_2d { 00038 00039 public: 00040 00041 /// The base random number generator 00042 rng_t r; 00043 00044 /** \brief Generate two numbers \c x and \c y from a 00045 distribution with zero mean and standard deviation sigma 00046 */ 00047 void random(double sigma, double &x, double &y) { 00048 00049 double x1, x2, w, y1, y2; 00050 00051 do { 00052 x1 = 2.0 * r.random() - 1.0; 00053 x2 = 2.0 * r.random() - 1.0; 00054 w = x1 * x1 + x2 * x2; 00055 } while ( w >= 1.0 ); 00056 00057 w = sqrt( (-2.0 * log( w ) ) / w ); 00058 x = x1 * sigma * w; 00059 y = x2 * sigma * w; 00060 00061 return; 00062 } 00063 00064 }; 00065 00066 #ifndef DOXYGENP 00067 } 00068 #endif 00069 00070 #endif
Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.
Project hosting provided by
,
O2scl Sourceforge Project Page