PureRandom采样类定义和测试
此是随机采样算法,效果感觉一般般。
类声明:
- #pragma once
- #ifndef __PURERANDOM_HEADER__
- #define __PURERANDOM_HEADER__
- #include "sampler.h"
- class PureRandom :public Sampler {
- public:
- PureRandom();
- ~PureRandom();
- PureRandom(const integer samps);
- PureRandom(const integer samps, const integer sets);
- PureRandom(const PureRandom& pr);
- PureRandom& operator=(const PureRandom& pr);
- virtual Sampler* clone() const;
- virtual void generate_samples();
- };
- #endif
类实现:
- #include "pch.h"
- #include "purerandom.h"
- PureRandom::PureRandom() :Sampler() {
- generate_samples();
- }
- PureRandom::~PureRandom() {}
- PureRandom::PureRandom(const integer samps) :Sampler(samps) {
- generate_samples();
- }
- PureRandom::PureRandom(const integer samps, const integer sets) : Sampler(samps, sets) {
- generate_samples();
- }
- PureRandom::PureRandom(const PureRandom& pr) : Sampler(pr) {
- generate_samples();
- }
- PureRandom& PureRandom::operator=(const PureRandom& pr) {
- if (this == &pr)
- return *this;
- Sampler::operator=(pr);
- return *this;
- }
- Sampler* PureRandom::clone() const {
- return new PureRandom(*this);
- }
- void PureRandom::generate_samples() {
- for (integer i=0;i<nsets;i++)
- for (integer j = 0; j < nsamples; j++) {
- Point2 sp(random_ldouble(), random_ldouble());
- samples.push_back(sp);
- }
- }
World类需要修改build函数,之前修改的仍然有效,不再重复
- void World::build() {
- vp.set_hres(200);
- vp.set_vres(100);
- vp.set_sampler(new PureRandom());//这里使用PureRandom采样,之后都在这行代码修改,从而测试各种采样算法。
- tracer_ptr = new MultiSphere(this);
- Geometrics* obj = new Sphere(0, 0.5);
- obj->set_color(RGBColor(1, 0, 0));
- add_object(obj);
- obj = new Sphere(Point3(0, -100.5, 0), 100);
- obj->set_color(RGBColor(0, 0, 1));
- add_object(obj);
- }
测试结果和图片:
PureRandom采样类定义和测试的更多相关文章
- Regular采样类定义和测试
这个算法是均匀采样算法,继承于Sampler类. 类声明: #pragma once #ifndef __REGULAR_HEADER__ #define __REGULAR_HEADER__ #in ...
- Jittered采样类定义和测试
抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...
- Hammersley采样类定义和测试
原理参照书籍 类声明: #pragma once #ifndef __HAMMERSLEY_HEADER__ #define __HAMMERSLEY_HEADER__ #include " ...
- NRooks采样类定义和测试
类声明: #pragma once #ifndef __NROOKS_HEADER__ #define __NROOKS_HEADER__ #include "sampler.h" ...
- MultiJittered采样类定义和测试
多重抖动在书上说的是水平和竖直方面随机交换. 类声明: #pragma once #ifndef __MULTIJITTERED_HEADER__ #define __MULTIJITTERED_HE ...
- Sampler类定义
此是所有采样的基类,这样定义的好处是,我们可以分别测试每一个采样算法. 类定义: #pragma once #ifndef __SAMPLER_HEADER__ #define __SAMPLER_H ...
- 开涛spring3(12.4) - 零配置 之 12.4 基于Java类定义Bean配置元数据
12.4 基于Java类定义Bean配置元数据 12.4.1 概述 基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件. 基于Java ...
- python类定义
在我的收藏中有一篇特别详细的类讲解 此处部分内容引自:http://blog.sina.com.cn/s/blog_59b6af690101bfem.html class myclass: 'this ...
- 20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义
20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然 ...
随机推荐
- 基于Proxmox平台搭建3D云教室
背景 本文介绍了在 Proxmox VE 虚拟化平台上使用NVIDIA A16 GPU,开启vGPU特性,利用DoraCloud 搭建3D云教室的方案. Proxmox virtualization ...
- 《Effective C++》阅读总结(三):资源管理
C++中的资源管理非常重要,在将资源加载到内存后,便可以使用资源了,当我们不再需要资源时,我们要保证其正确的释放,才能将其占用的内存空间归还给操作系统,不正确的释放很容易造成内存泄漏.本章以资源管理类 ...
- 《C Primer Plus》第六版笔记--1~3章
目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...
- Redis - 读写模式 - 缓存一致性
Cache Aside Pattern(旁路缓存模式) 读:从cache中读取数据,若读取到则直接返回:cache中不存在则去database中读取,然后更新到cache. 写:先更新database ...
- JAVA - 线程同步和线程调度的相关方法
JAVA - 线程同步和线程调度的相关方法 wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁:wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等 ...
- java中的final与可变类型、不可变类型的关系
如果你对final和不可变类型的概念与区别有疑问的话,可以打开这篇文章.希望我的解答可以帮到您! 1.不可变类型: 什么是可变类型,什么是不可变类型呢? 首先我们看一下下面的这行代码: String ...
- torch.nn.MSELoss()函数解读
转载自:https://www.cnblogs.com/tingtin/p/13902325.html
- 高通sensor理解
.1.高通为什么引入adsp? 2.adsp sensor 是如何工作起来的? 3.adsp 和ap 是如何通信的? 4.adsp 架构组成 解答: 1.高通在msm8960之前sensor 是挂在p ...
- Java集合框架(一)-ArrayList
大佬理解->Java集合之ArrayList 1.ArrayList的特点 存放的元素有序 元素不唯一(可以重复) 随机访问快 插入删除元素慢 非线程安全 2.底层实现 底层初始化,使用一个Ob ...
- 2.C++标准库函数:getline函数 定界流输入截取函数 -windows编程
引言:今天工作遇到了一个需要按行读取txt文件数据的需求,查询了一下getline()函数,发现这竟然是一个C++的标准库函数,而且设计的很好,特地做一下记录.getline本质是一个定界流输入截取函 ...