#include "whiteNoise.h"

whiteNoise::whiteNoise(double mean, double contrast1, double contrast2, double period, double switchT,int X, int Y){

    switchTime = switchT;
    GaussianPeriod = period;

    distribution1 = *(new normal_distribution<double>(mean,contrast1*mean));
    distribution2 = *(new normal_distribution<double>(mean,contrast2*mean));

    output = new CImg <double>(Y,X,1,3);

    cimg_forXY(*output,x,y) {
        (*output)(x,y,0,0) = 1.0,
        (*output)(x,y,0,1) = 1.0,
        (*output)(x,y,0,2) = 1.0;
    }

}

whiteNoise::whiteNoise(const whiteNoise& copy){

}

whiteNoise::~whiteNoise(void){

}

//------------------------------------------------------------------------------//

void whiteNoise::initializeDist(unsigned seed){
    generator1 = *(new default_random_engine(seed));
    generator2 = *(new default_random_engine(seed));

}

//------------------------------------------------------------------------------//


CImg<double>* whiteNoise::update(double t){

    // draw new value from Gaussian distribution
    if((int)t%(int)GaussianPeriod == 0){

        double value = 0;
        if(t < switchTime)
            value = distribution1(generator1);
        else
            value = distribution2(generator2);

        if(value<0.0)
            value = 0.0;

        cimg_forXY(*output,x,y) {
            (*output)(x,y,0,0) = value*255,
            (*output)(x,y,0,1) = value*255,
            (*output)(x,y,0,2) = value*255;
        }

    }

    return output;
}