类声明:

#pragma once
#ifndef __NROOKS_HEADER__
#define __NROOKS_HEADER__ #include "sampler.h" class NRooks :public Sampler {
public:
NRooks();
~NRooks();
NRooks(const integer samps);
NRooks(const integer samps, const integer sets);
NRooks(const NRooks& nr);
NRooks& operator=(const NRooks& nr);
virtual Sampler* clone() const;
virtual void generate_samples();
private:
void shuffled_x_coordinates();
void shuffled_y_coordinates();
};
#endif

类实现:

#include "pch.h"
#include "nrooks.h" NRooks::NRooks() :Sampler() {
generate_samples();
} NRooks::~NRooks() {} NRooks::NRooks(const integer samps) :Sampler(samps) {
generate_samples();
} NRooks::NRooks(const integer samps, const integer sets) : Sampler(samps, sets) {
generate_samples();
} NRooks::NRooks(const NRooks& nr) : Sampler(nr) {
generate_samples();
} NRooks& NRooks::operator=(const NRooks& nr) {
if (this == &nr)
return *this;
Sampler::operator=(nr);
return *this;
} Sampler* NRooks::clone() const {
return new NRooks(*this);
} void NRooks::generate_samples() {
for (integer i = 0; i < nsets; i++)
for (integer j = 0; j < nsamples; j++) {
Point2 sp((j + random_ldouble()) / nsamples, (j + random_ldouble()) / nsamples);
samples.push_back(sp);
}
shuffled_x_coordinates();
shuffled_y_coordinates();
} void NRooks::shuffled_x_coordinates() {
for (integer i = 0; i < nsets; i++)
for (integer j = 0; j < nsamples - 1; j++) {
integer k = random_integer() % nsamples + i * nsamples;
std::swap(samples[i * nsamples + j + 1].x, samples[k].x);
}
} void NRooks::shuffled_y_coordinates() {
for (integer i = 0; i < nsets; i++)
for (integer j = 0; j < nsamples - 1; j++) {
integer k = random_integer() % nsamples + i * nsamples;
std::swap(samples[i * nsamples + j + 1].y, samples[k].y);
}
}

  

测试结果图:

NRooks采样类定义和测试的更多相关文章

  1. Regular采样类定义和测试

    这个算法是均匀采样算法,继承于Sampler类. 类声明: #pragma once #ifndef __REGULAR_HEADER__ #define __REGULAR_HEADER__ #in ...

  2. Jittered采样类定义和测试

    抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...

  3. PureRandom采样类定义和测试

    此是随机采样算法,效果感觉一般般. 类声明: #pragma once #ifndef __PURERANDOM_HEADER__ #define __PURERANDOM_HEADER__ #inc ...

  4. Hammersley采样类定义和测试

    原理参照书籍 类声明: #pragma once #ifndef __HAMMERSLEY_HEADER__ #define __HAMMERSLEY_HEADER__ #include " ...

  5. MultiJittered采样类定义和测试

    多重抖动在书上说的是水平和竖直方面随机交换. 类声明: #pragma once #ifndef __MULTIJITTERED_HEADER__ #define __MULTIJITTERED_HE ...

  6. Sampler类定义

    此是所有采样的基类,这样定义的好处是,我们可以分别测试每一个采样算法. 类定义: #pragma once #ifndef __SAMPLER_HEADER__ #define __SAMPLER_H ...

  7. 开涛spring3(12.4) - 零配置 之 12.4 基于Java类定义Bean配置元数据

    12.4  基于Java类定义Bean配置元数据 12.4.1  概述 基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件. 基于Java ...

  8. python类定义

    在我的收藏中有一篇特别详细的类讲解 此处部分内容引自:http://blog.sina.com.cn/s/blog_59b6af690101bfem.html class myclass: 'this ...

  9. 20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义

    20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然 ...

随机推荐

  1. K8S 部署Dashboard UI

    Kubernetes Dashboard是Kubernetes集群的通用.基于Web的UI.它允许用户管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身. 访问到DashBoard有两种方式 ...

  2. OpenWrt 20.02.2 小米路由器3G配置CP1025网络打印

    家里的施乐 CP116w 工作快五年了终于罢工了. 黑粉报错, 自己也不会拆, 只能搁置了. 后来换了个 HP CP1025. 这个打印机也不错, 墨盒便宜没什么废粉, 就是启动慢一点, 而且 -- ...

  3. python 企业微信发送文件

    import os import json import urllib3 class WinxinApi(object): def __init__(self,corpid,secret,chatid ...

  4. python常用标准库(os系统模块、shutil文件操作模块)

    常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...

  5. 我是一个Dubbo数据包...

    hello,大家好呀,我是小楼! 今天给大家带来一篇关于Dubbo IO交互的文章,本文是一位同事写的文章,用有趣的文字把枯燥的知识点写出来,通俗易懂,非常有意思,所以迫不及待找作者授权然后分享给大家 ...

  6. 【spring源码系列】之【FactoryBean类型的接口】

    1.概述 目前我们知道,spring创建bean有多种方式,比如xml方式创建,比如@Component,@Service,@Controler,@Repository注解创建,比如@Autowire ...

  7. python 基础知识-day6(内置函数)

    1.sorted():用于字典的排序 dict1={"name":"cch","age":"3","sex&q ...

  8. SAP Web Dynpro-调试应用程序

    您可以使用ABAP工作台中的各种工具来调试源代码. 您可以使用调试器测试Web Dynpro应用程序的所有源代码. 步骤1-要启动调试器,您必须在ABAP工作台中选择一个新的调试器. 步骤2-转到实用 ...

  9. 常见的git命令和git->github错误

    相关命令 git remote git remote add origin xxx (xxx为仓库链接) 给这个链接取一个名字,为origin git pull git pull <远程主机名& ...

  10. 【一知半解】synchronied

    synchronized是什么 synchronized是java同步锁,同一时刻多个线程对同一资源进行修改时,能够保证同一时刻只有一个线程获取到资源并对其进行修改,因此保证了线程安全性. synch ...