#include "StratifiedSampler.h"
namespace util {
	StratifiedSampler::StratifiedSampler (const std::shared_ptr<Sampler>& sampler, size_t n)
		:sampler_ (sampler), n_ (std::ceil (std::sqrt (n))) {};

	Vec3 StratifiedSampler::color (float x, float y) const
	{
		Vec3 color (0, 0, 0);
		for (int xi = 0; xi < n_; xi++) {
			for (int yi = 0; yi < n_; yi++) {
				double rx = dis (gen);
				double ry = dis (gen);
				double xs = x + (xi + rx) / n_;
				double ys = y + (yi + ry) / n_;
				color = color + sampler_->color (xs, ys);
			}
		}
		//if (color != Vec3 (16, 16, 16) && color != Vec3 (0, 0, 8))
			//std::cout << color << " and " << color / (n_ * n_) << n_ << std::endl;
		return color / (n_ * n_);
	}
}