#ifndef __SAMPLEGENERATOR_H #define __SAMPLEGENERATOR_H /** Class that generates samples on a circle */ struct Sample2 { Sample2() {} Sample2(float _x, float _y): x(_x), y(_y) {} float x; float y; }; struct Sample3 { Sample3() {} Sample3(float _x, float _y, float _z): x(_x), y(_y), z(_z) {} float x; float y; float z; }; /** Class generating random samples on a disc or a sphere, respectively. */ class SampleGenerator { public: SampleGenerator(int numSamples, float radius); virtual void Generate(float *samples) const = 0; protected: SampleGenerator() {}; int mNumSamples; float mRadius; }; class PoissonDiscSampleGenerator: public SampleGenerator { public: PoissonDiscSampleGenerator(int numSamples, float radius); virtual void Generate(float *samples) const; }; class GaussianSampleGenerator: public SampleGenerator { public: GaussianSampleGenerator(int numSamples, float radius); virtual void Generate(float *samples) const; }; class SphericalSampleGenerator: public SampleGenerator { public: SphericalSampleGenerator(int numSamples, float radius); virtual void Generate(float *samples) const; }; #endif