Jittered class definitions and test sample

Jitter sampling algorithm testing, small graphics do not see any significant difference between the code and the test chart or bar.

Class declaration:

#pragma once
#ifndef __JITTERED_HEADER__
#define __JITTERED_HEADER__

#include "sampler.h"

class Jittered:public Sampler {
public:
	Jittered();
	~Jittered();
	Jittered(const integer samps);
	Jittered(const integer samps, const integer sets);
	Jittered(const Jittered& ji);
	Jittered& operator=(const Jittered& ji);
	virtual Sampler* clone() const;
	virtual void generate_samples();
};
#endif

Class implementation:

#include "pch.h"
#include "jittered.h"

Jittered::Jittered() :Sampler() {
	generate_samples();
}

Jittered::~Jittered() {}

Jittered::Jittered(const integer samps) : Sampler(samps) {
	generate_samples();
}

Jittered::Jittered(const integer samps, const integer sets) : Sampler(samps, sets) {
	generate_samples();
}

Jittered::Jittered(const Jittered& ji) : Sampler(ji) {
	generate_samples();
}

Jittered& Jittered::operator=(const Jittered& ji) {
	if (this == &ji)
		return *this;
	Sampler::operator=(ji);
	return *this;
}

Sampler* Jittered::clone() const {
	return new Jittered(*this);
}

void Jittered::generate_samples() {
	integer n = (integer)std::sqrt((ldouble)nsamples);
	for (integer p = 0; p < nsets; p++) {
		for (integer i = 0; i < n; i++)
			for (integer j = 0; j < n; j++) {
				Point2 sp ((j + random_ldouble ()) / n, (i + random_ldouble ()) / n); // dither algorithm core
				samples.push_back(sp);
			}
	}
} 

Test results chart:

Guess you like

Origin www.cnblogs.com/dalgleish/p/12602759.html