[2853] | 1 | #ifndef __SAMPLEGENERATOR_H
|
---|
| 2 | #define __SAMPLEGENERATOR_H
|
---|
| 3 |
|
---|
[2901] | 4 | #include "Halton.h"
|
---|
[2853] | 5 |
|
---|
[2901] | 6 |
|
---|
[2853] | 7 | /** Class that generates samples on a circle
|
---|
| 8 | */
|
---|
| 9 |
|
---|
| 10 | struct Sample2
|
---|
| 11 | {
|
---|
[2886] | 12 | Sample2() {}
|
---|
| 13 | Sample2(float _x, float _y): x(_x), y(_y) {}
|
---|
| 14 |
|
---|
[2853] | 15 | float x;
|
---|
| 16 | float y;
|
---|
| 17 | };
|
---|
| 18 |
|
---|
| 19 |
|
---|
[2900] | 20 | struct Sample3
|
---|
| 21 | {
|
---|
| 22 | Sample3() {}
|
---|
| 23 | Sample3(float _x, float _y, float _z): x(_x), y(_y), z(_z) {}
|
---|
| 24 |
|
---|
| 25 | float x;
|
---|
| 26 | float y;
|
---|
| 27 | float z;
|
---|
| 28 | };
|
---|
| 29 |
|
---|
[2911] | 30 | /** Class generating random samples on a disc or in a sphere, respectively.
|
---|
[2900] | 31 | */
|
---|
[2853] | 32 | class SampleGenerator
|
---|
| 33 | {
|
---|
| 34 | public:
|
---|
| 35 |
|
---|
| 36 | SampleGenerator(int numSamples, float radius);
|
---|
| 37 |
|
---|
[2900] | 38 | virtual void Generate(float *samples) const = 0;
|
---|
[2853] | 39 |
|
---|
[3230] | 40 | virtual ~SampleGenerator();
|
---|
| 41 |
|
---|
[2853] | 42 | protected:
|
---|
| 43 |
|
---|
| 44 | SampleGenerator() {};
|
---|
| 45 |
|
---|
[3230] | 46 | HaltonSequence *mHalton;
|
---|
[2853] | 47 | int mNumSamples;
|
---|
| 48 | float mRadius;
|
---|
| 49 | };
|
---|
| 50 |
|
---|
| 51 |
|
---|
[3227] | 52 | class RandomSampleGenerator2D: public SampleGenerator
|
---|
[2902] | 53 | {
|
---|
| 54 | public:
|
---|
| 55 |
|
---|
[3227] | 56 | RandomSampleGenerator2D(int numSamples, float radius);
|
---|
[2902] | 57 |
|
---|
| 58 | virtual void Generate(float *samples) const;
|
---|
| 59 | };
|
---|
| 60 |
|
---|
| 61 |
|
---|
[2911] | 62 | /** This class generates random samples on a disc respecting
|
---|
| 63 | the poisson disc condition (all samples at least distance d apart)
|
---|
| 64 | according to some d related to the number of samples.
|
---|
| 65 | */
|
---|
[3227] | 66 | class PoissonDiscSampleGenerator2D: public SampleGenerator
|
---|
[2853] | 67 | {
|
---|
| 68 | public:
|
---|
[2886] | 69 |
|
---|
[3227] | 70 | PoissonDiscSampleGenerator2D(int numSamples, float radius);
|
---|
[2853] | 71 |
|
---|
[2900] | 72 | virtual void Generate(float *samples) const;
|
---|
[2853] | 73 | };
|
---|
| 74 |
|
---|
[2930] | 75 |
|
---|
| 76 | /** This class generates random samples on a disc
|
---|
| 77 | that have the property that their density decreases quadratically
|
---|
| 78 | with the distance
|
---|
| 79 | */
|
---|
[3229] | 80 | class QuadraticDiscSampleGenerator2D: public PoissonDiscSampleGenerator2D
|
---|
[2930] | 81 | {
|
---|
| 82 | public:
|
---|
| 83 |
|
---|
[3227] | 84 | QuadraticDiscSampleGenerator2D(int numSamples, float radius);
|
---|
[2930] | 85 |
|
---|
| 86 | virtual void Generate(float *samples) const;
|
---|
| 87 | };
|
---|
| 88 |
|
---|
| 89 |
|
---|
[2911] | 90 | /** This class generates random spherical samples.
|
---|
| 91 | */
|
---|
[3227] | 92 | class SphericalSampleGenerator3D: public SampleGenerator
|
---|
[2899] | 93 | {
|
---|
| 94 | public:
|
---|
| 95 |
|
---|
[3227] | 96 | SphericalSampleGenerator3D(int numSamples, float radius);
|
---|
[2899] | 97 |
|
---|
[2900] | 98 | virtual void Generate(float *samples) const;
|
---|
[2899] | 99 | };
|
---|
| 100 |
|
---|
| 101 |
|
---|
[2853] | 102 | #endif |
---|