5 #include <cgv/math/vec.h>
6 #include <cgv/math/mat.h>
7 #include <cgv/math/eig.h>
8 #include <cgv/math/diag_mat.h>
9 #include <cgv/math/perm_mat.h>
10 #include <cgv/math/up_tri_mat.h>
11 #include <cgv/math/low_tri_mat.h>
12 #include <cgv/math/quat.h>
28 unsigned long long u,v,w;
35 v = 4101842887655102017LL;
37 unsigned long long ull;
46 unsigned long long seed = clock();
51 random(
unsigned long long seed) : storedval(0.0)
59 u = u*2862933555777941757LL + 7046029254386353087LL;
60 v ^= v >> 17; v ^= v <<31; v ^= v >> 8;
61 w = 4294957665U*(w & 0xffffffff) + (w >> 32);
62 unsigned long long x = u ^(u << 21); x ^= x >>35; x^=x << 4;
101 unsigned long long v;
107 void uniform(
const unsigned min,
const unsigned max,
unsigned& rv)
110 rv =rv%(max-min+1)+min;
114 void uniform(
const int min,
const int max,
int& rv)
117 rv =(int)(rv%(
unsigned)(max-min+1))+min;
124 unsigned long long v;
126 rv= 5.42101086242752217E-20 * v;
130 void uniform(
const double min,
const double max,
double &rv)
134 rv= (max-min)*v + min;
146 void uniform(
const float min,
const float max,
float& rv)
150 rv= (max-min)*f + min;
156 for(
unsigned i = 0; i < rv.
size();i++)
163 for(
unsigned i = 0; i < rv.
size();i++)
172 for(
unsigned i = 0; i < rv.
size();i++)
179 for(
unsigned i = 0; i < rv.
size();i++)
186 for(
unsigned i = 0; i < rv.
nrows(); i++)
187 for(
unsigned j = 0; j < rv.
ncols(); j++)
194 for(
unsigned i = 0; i < rv.
nrows(); i++)
195 for(
unsigned j = 0; j < rv.
ncols(); j++)
203 for(
unsigned i = 0; i < rv.
size();i++)
209 std::random_shuffle(&(rv(0)),&(rv(rv.
nrows())));
215 for(
unsigned i = 0; i < rv.nrows(); i++)
216 for(
unsigned j = i; j < rv.ncols(); j++)
223 void uniform(
const float min,
const float max,up_tri_mat<float>& rv)
225 for(
unsigned i = 0; i < rv.nrows(); i++)
226 for(
unsigned j = i; j < rv.ncols(); j++)
233 for(
unsigned i = 0; i < rv.nrows(); i++)
234 for(
unsigned j = i; j < rv.ncols(); j++)
239 void uniform(
const double min,
const double max,up_tri_mat<double>& rv)
241 for(
unsigned i = 0; i < rv.nrows(); i++)
242 for(
unsigned j = i; j < rv.ncols(); j++)
249 for(
unsigned i = 0; i < rv.nrows(); i++)
250 for(
unsigned j = 0; j <= i; j++)
255 void uniform(
const float min,
const float max, low_tri_mat<float>& rv)
257 for(
unsigned i = 0; i < rv.nrows(); i++)
258 for(
unsigned j = 0; j <= i; j++)
265 for(
unsigned j = 0; j < rv.ncols(); j++)
266 for(
unsigned i = 0; i < j; i++)
271 void uniform(
const double min,
const double max, low_tri_mat<double>& rv)
273 for(
unsigned j = 0; j < rv.ncols(); j++)
274 for(
unsigned i = 0; i < j; i++)
281 for(
unsigned i = 0; i < rv.
nrows(); i++)
288 for(
unsigned i = 0; i < rv.
nrows(); i++)
295 for(
unsigned i = 0; i < rv.
nrows(); i++)
302 for(
unsigned i = 0; i < rv.
nrows(); i++)
310 for(
unsigned i = 0; i < rv.
nrows(); i++)
311 for(
unsigned j = 0; j < rv.
ncols(); j++)
318 for(
unsigned i = 0; i < rv.
nrows(); i++)
319 for(
unsigned j = 0; j < rv.
ncols(); j++)
328 double v1,v2,rsq,fac;
338 }
while(rsq >= 1.0 || rsq == 0.0);
339 fac = sqrt(-2.0*std::log(rsq)/rsq);
360 void normal(
const double mu,
const double sigma,
double &rv)
368 void normal(
const float mu,
const float sigma,
float& rv)
378 for(
unsigned i = 0;i < v.size(); i++)
387 for(
unsigned i = 0;i < v.size();i++)
400 float z, r, theta, omega;
404 r = sqrt( 1 - z * z );
405 theta = 2.0f * 3.14159f * x[1];
406 omega = 3.14159f * x[2];
411 b = s * cos( theta ) * r;
412 c = s * sin( theta ) * r;
429 double a, b, c, d, s;
430 double z, r, theta, omega;
434 r = sqrt( 1 - z * z );
435 theta = 2.0 * 3.14159 * x[1];
436 omega = 3.14159 * x[2];
441 b = s * cos( theta ) * r;
442 c = s * sin( theta ) * r;
453 if(m.nrows() == 3 && m.ncols() == 3)
460 if(m.nrows() == 4 && m.ncols() == 4)
474 if(m.nrows() == 3 && m.ncols() == 3)
481 if(m.nrows() == 4 && m.ncols() == 4)
497 for (
unsigned i=0; i<p.
size(); ++i)
507 for (
unsigned i=0; i<p.
size(); ++i)
517 r = pow(r, 1.0/p.
size());
531 p= u*p1 + v*p2 +(1.0-u-v)*p3;
538 for(
unsigned i = 0;i < p.
size();i++)
548 std::set<unsigned> s;
558 for(std::set<unsigned>::iterator it =s.begin(); it != s.end();it++,i++)
random(unsigned long long seed)
constructor initializes random generator with given seed
Definition: random.h:51
void uniform(up_tri_mat< double > &rv)
generates a pseudo random double precision upper triangular matrix with uniformly distribute componen...
Definition: random.h:231
void uniform(const double min, const double max, up_tri_mat< double > &rv)
generates a pseudo random double precision upper triangular matrix with uniformly distribute componen...
Definition: random.h:239
void uniform(low_tri_mat< double > &rv)
generates a pseudo random double precision lower triangular matrix with uniformly distribute componen...
Definition: random.h:263
void uniform(const float min, const float max, float &rv)
generates a pseudo random single-precision floating point number uniformly distributed between 0 and ...
Definition: random.h:146
mat< T > quat_2_mat_44(const vec< T > &q)
convert unit quaternion to 4x4 rotation matrix
Definition: quat.h:167
void resize(unsigned dim)
resize the vector
Definition: vec.h:557
void uniform(long long &rv)
generates a 64bit pseudo random signed integer
Definition: random.h:91
void uniform(perm_mat &rv)
generates a pseudo random permutation matrix
Definition: random.h:200
void uniform(const unsigned min, const unsigned max, unsigned &rv)
generates a pseudo random integer between min and max
Definition: random.h:107
void uniform(diag_mat< double > &rv)
generates a pseudo random double precision diagonal matrix with uniformly distribute components betwe...
Definition: random.h:293
void uniform_orientation(mat< float > &m)
generates a single precision random orientation represented as a rotation matrix
Definition: random.h:451
unsigned nrows() const
number of rows
Definition: perm_mat.h:40
void set(const T &c0, const T &c1)
set entries of a 2d vector
Definition: vec.h:206
void uniform_point_in_box(const vec< double > &minp, const vec< double > &maxp, vec< double > &p)
creates an uniform distributed random point in box minp..maxp
Definition: random.h:502
Definition: perm_mat.h:13
void uniform(long &rv)
generates a 32bit pseudo random signed integer
Definition: random.h:83
void uniform(const float min, const float max, up_tri_mat< float > &rv)
generates a pseudo random single precision upper triangular matrix with uniformly distribute componen...
Definition: random.h:223
void uniform(const double min, const double max, vec< double > &rv)
generates a pseudo random double precision vector with uniformly distribute components between min an...
Definition: random.h:177
void uniform(const float min, const float max, mat< float > &rv)
generates a pseudo random single precision full matrix with uniformly distribute components between m...
Definition: random.h:192
A column vector class.
Definition: fvec.h:13
void uniform_quat_orientation(vec< double > &q)
Definition: random.h:422
unsigned size() const
number of elements
Definition: vec.h:97
void uniform_point_in_triangle(const vec< double > &p1, const vec< double > &p2, const vec< double > &p3, vec< double > p)
creates an uniform distributed random point in triangle p1,p2,p3
Definition: random.h:521
void uniform(double &rv)
generates a pseudo random double-precision floating point number uniformly distributed between 0 and ...
Definition: random.h:122
void uniform(unsigned long long &rv)
generates 64bit pseudo random integer
Definition: random.h:57
void uniform_quat_orientation(vec< float > &q)
generates a single precision random orientation represented as a unit quaternion
Definition: random.h:393
void uniform(const double min, const double max, low_tri_mat< double > &rv)
generates a pseudo random double precision lower triangular matrix with uniformly distribute componen...
Definition: random.h:271
void uniform(float &rv)
generates a pseudo random single-precision floating point number uniformly distributed between 0 and ...
Definition: random.h:138
void normalize()
normalize the vector using the L2-Norm
Definition: vec.h:649
unsigned size() const
number of stored elements
Definition: perm_mat.h:34
void uniform_point_in_unit_box(vec< double > &p)
creates an uniform distributed random point in unit box (0,0,...,0)..(1,1,...,1); if dim(p)=0,...
Definition: random.h:493
void uniform_nchoosek(unsigned n, unsigned k, vec< unsigned > &indices)
creates a vector of k unique indices drawn from 0 to n-1
Definition: random.h:546
void uniform(const double min, const double max, mat< double > &rv)
generates a pseudo random double full matrix with uniformly distribute components between min and max
Definition: random.h:316
void uniform(const float min, const float max, vec< float > &rv)
generates a pseudo random single precision vector with uniformly distribute components between min an...
Definition: random.h:161
Definition: diag_mat.h:16
void uniform(diag_mat< float > &rv)
generates a pseudo random single precision diagonal matrix with uniformly distribute components betwe...
Definition: random.h:279
void uniform(const double min, const double max, double &rv)
generates a pseudo random double-precision floating point number uniformly distributed between min an...
Definition: random.h:130
void uniform(const float min, const float max, low_tri_mat< float > &rv)
generates a pseudo random single precision lower triangular matrix with uniformly distribute componen...
Definition: random.h:255
void uniform(bool &rv)
generates a pseudo random boolean
Definition: random.h:99
void uniform(vec< float > &rv)
generates a pseudo random single precision vector with uniformly distribute components between 0 and ...
Definition: random.h:154
void set_seed(unsigned long long seed)
set a new seed
Definition: random.h:32
void uniform(const int min, const int max, int &rv)
generates a pseudo random integer between min and max
Definition: random.h:114
void normal(const double mu, const double sigma, double &rv)
generates a normal deviate double-precision floating point value with mu and sigma
Definition: random.h:360
void uniform_orientation(mat< double > &m)
generates a double precision random orientation represented as a rotation matrix
Definition: random.h:472
void uniform(up_tri_mat< float > &rv)
generates a pseudo random single precision upper triangular matrix with uniformly distribute componen...
Definition: random.h:213
mat< T > quat_2_mat_33(const vec< T > &q)
convert unit quaternion to 3x3 rotation matrix
Definition: quat.h:140
void uniform_point_in_unit_ball(vec< double > &p)
creates an uniform distributed random point in unit sphere
Definition: random.h:512
void uniform(low_tri_mat< float > &rv)
generates a pseudo random single precision lower triangular matrix with uniformly distribute componen...
Definition: random.h:247
unsigned nrows() const
number of rows
Definition: mat.h:541
void uniform(unsigned int &rv)
generates a 32bit pseudo random unsigned integer
Definition: random.h:67
void normal(const float mu, const float sigma, float &rv)
generates a normal deviate single-precision floating point value with mu and sigma
Definition: random.h:368
void uniform(const double min, const double max, diag_mat< double > &rv)
generates a pseudo random double precision diagonal matrix with uniformly distribute components betwe...
Definition: random.h:300
void uniform(mat< float > &rv)
generates a pseudo random single precision full matrix with uniformly distribute components between 0...
Definition: random.h:184
unsigned nrows() const
number of rows
Definition: diag_mat.h:63
void uniform(const float min, const float max, diag_mat< float > &rv)
generates a pseudo random single precision diagonal matrix with uniformly distribute components betwe...
Definition: random.h:286
void normal(double &rv)
generates a normal deviate double-precision floating point value with mu = 0 and sigma = 1
Definition: random.h:326
void uniform(vec< double > &rv)
generates a pseudo random double precision vector with uniformly distribute components between 0 and ...
Definition: random.h:170
random()
standard constructor uses system time as random seed
Definition: random.h:44
void uniform(mat< double > &rv)
generates a pseudo random double full matrix with uniformly distribute components between 0 and 1
Definition: random.h:308
void uniform(int &rv)
generates a 32bit pseudo random signed integer
Definition: random.h:75
void uniform_direction(vec< double > &v)
generates a double precision random direction (uniformly distributed position on the unit sphere)
Definition: random.h:385
void normal(float &rv)
generates a normal deviate single-precision floating point value with mu = 0 and sigma = 1
Definition: random.h:352
void uniform_point_on_sphere(const vec< double > ¢er, const double &radius, vec< double > &p)
creates an uniform distributed random point on the surface of a sphere with given center and radius
Definition: random.h:535
unsigned ncols() const
number of columns
Definition: mat.h:547
the cgv namespace
Definition: vr_calib.cxx:9
void uniform_direction(vec< float > &v)
generates a single precision random direction (uniformly distributed position on the unit sphere)
Definition: random.h:375