KrisLibrary  1.0.0
math3d/random.h
Go to the documentation of this file.
1 #ifndef MATH3D_RANDOM_H
2 #define MATH3D_RANDOM_H
3 
6 #include <KrisLibrary/math/complex.h>
7 #include "primitives.h"
8 
14 namespace Math3D {
15 
18 
19 inline void SampleCircle(Real r,Vector2& v)
20 {
21  Math::SampleCircle(r,v.x,v.y);
22 }
23 
24 inline void SampleDisk(Real r,Vector2& v)
25 {
26  Math::SampleDisk(r,v.x,v.y);
27 }
28 
29 inline void SampleSphere(Real r,Vector3& v)
30 {
31  Math::SampleSphere(r,v.x,v.y,v.z);
32 }
33 
34 inline void SampleBall(Real r,Vector3& v)
35 {
36  Math::SampleBall(r,v.x,v.y,v.z);
37 }
38 
39 inline void SampleSquare(Real d,Vector2& v)
40 {
41  v.set(Rand(-d,d),Rand(-d,d));
42 }
43 
44 inline void SampleCube(Real d,Vector3& v)
45 {
46  v.set(Rand(-d,d),Rand(-d,d),Rand(-d,d));
47 }
48 
49 inline void SampleHyperCube(Real d,Vector4& v)
50 {
51  v.set(Rand(-d,d),Rand(-d,d),Rand(-d,d),Rand(-d,d));
52 }
53 
54 inline void SampleAABB(const Vector2& bmin,const Vector2& bmax,Vector2& v)
55 {
56  v.set(Rand(bmin.x,bmax.x),Rand(bmin.y,bmax.y));
57 }
58 
59 inline void SampleAABB(const Vector3& bmin,const Vector3& bmax,Vector3& v)
60 {
61  v.set(Rand(bmin.x,bmax.x),Rand(bmin.y,bmax.y),Rand(bmin.z,bmax.z));
62 }
63 
64 inline void SampleAABB(const Vector4& bmin,const Vector4& bmax,Vector4& v)
65 {
66  v.set(Rand(bmin.x,bmax.x),Rand(bmin.y,bmax.y),Rand(bmin.z,bmax.z),Rand(bmin.w,bmax.w));
67 }
68 
69 void RandRotation(Quaternion& q);
70 
71 //convenience functions, may be slightly slower than the above
72 inline Vector2 SampleCircle(Real r) { Vector2 v; SampleCircle(r,v); return v; }
73 inline Vector2 SampleDisk(Real r) { Vector2 v; SampleDisk(r,v); return v; }
74 inline Vector3 SampleSphere(Real r) { Vector3 v; SampleSphere(r,v); return v; }
75 inline Vector3 SampleBall(Real r) { Vector3 v; SampleBall(r,v); return v; }
76 inline Vector2 SampleSquare(Real d) { Vector2 v; SampleSquare(d,v); return v; }
77 inline Vector3 SampleCube(Real d) { Vector3 v; SampleCube(d,v); return v; }
78 inline Vector4 SampleHyperCube(Real d) { Vector4 v; SampleHyperCube(d,v); return v; }
79 inline Vector2 SampleAABB(const Vector2& bmin,const Vector2& bmax) { Vector2 v; SampleAABB(bmin,bmax,v); return v; }
80 inline Vector3 SampleAABB(const Vector3& bmin,const Vector3& bmax) { Vector3 v; SampleAABB(bmin,bmax,v); return v; }
81 inline Vector4 SampleAABB(const Vector4& bmin,const Vector4& bmax) { Vector4 v; SampleAABB(bmin,bmax,v); return v; }
82 inline Quaternion RandRotation() { Quaternion q; RandRotation(q); return q; }
83 
86 } //namespace Math3D
87 
88 #endif
void SampleBall(Real r, Real &x, Real &y, Real &z)
Uniform distribution on boundary of a sphere with radius r.
Definition: sample.cpp:189
Class declarations for useful 3D math types.
void SampleSphere(Real r, Real &x, Real &y, Real &z)
Uniform distribution inside a sphere with radius r.
Definition: sample.cpp:179
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
Real Rand()
Generates a random Real uniformly in [0,1].
Definition: math/random.h:36
Functions for random sampling of various sets.
void SampleDisk(Real r, Real &x, Real &y)
Uniform distribution inside a circle with radius r.
Definition: sample.cpp:159
void SampleCircle(Real r, Real &x, Real &y)
Uniform distribution on boundary of a circle with radius r.
Definition: sample.cpp:152
Defines a standard method for random floating-point number generation.