• Jittered采样类定义和测试


    抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧。

    类声明:

    #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

    类实现:

    #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); //抖动算法核心
    				samples.push_back(sp);
    			}
    	}
    } 

    测试结果图:

  • 相关阅读:
    python中的 if __name__ == "__main__": 语句的作用
    python的打包与解包
    python循环删除列表元素
    python字典键值对新增与修改的几种方法及差异总结
    python列表元素删除的几种方法以及差异总结
    python之redis(二)
    python之redis(一)
    python之mysql(四)
    python之mysql(三)
    python之mysql(二)
  • 原文地址:https://www.cnblogs.com/dalgleish/p/12602759.html
Copyright © 2020-2023  润新知