NRooksクラス定義とテストサンプル

クラスの宣言:

一度の#pragma 
#ifndefの__NROOKS_HEADER__ 
の#define __NROOKS_HEADER__ 

の#include "sampler.h" 

公共サンプラー{:クラスNRooks 
公共:
	NRooks(); 
	〜NRooks(); 
	NRooks(CONST整数SAMPS)。
	NRooks(CONST整数SAMPS、CONST整数セット)。
	NRooks(のconst NRooks&NR); 
	NRooks&演算子=(CONST NRooks&NR)。
	仮想サンプラー*クローン()constは、
	仮想空generate_samples(); 
プライベート:
	無効shuffled_x_coordinates(); 
	空shuffled_y_coordinates(); 
}。
#endifの

クラスの実装:

#include "pch.h" 
の#include "nrooks.h" 

NRooks :: NRooks():サンプラー(){ 
	generate_samples()。
} 

NRooks ::〜NRooks(){} 

NRooks :: NRooks(CONST整数SAMPS):サンプラー(SAMPS){ 
	generate_samples()。
} 

NRooks :: NRooks(CONST整数SAMPS、CONST整数セット):サンプラー(SAMPS、セット){ 
	generate_samples()。
} 

NRooks :: NRooks(CONST NRooks&NR):サンプラー(NR){ 
	generate_samples()。
} 

NRooks&NRooks ::演算子=(CONST NRooks&NR){ 
	(この==&NR)であれば
		リターン*この; 
	サンプラー::演算子=(NR)。
	*これを返します。
} 

サンプラー* NRooks ::クローン()constは{ 
	(この*)新しいNRooksを返します。

ボイドNRooks :: generate_samples(){ 
	(I = 0の整数であり; I <nsets; I ++)用の
		ため(J整数= 0; J <nsamples; J ++){ 
			ポイント2 SP((J + random_ldouble())/ nsamples、(J + random_ldouble())/ nsamples)。
			samples.push_back(SP)。
		} 
	shuffled_x_coordinates()。
	shuffled_y_coordinates(); 
} 

ボイドNRooks :: shuffled_x_coordinates(){ 
	ための(I 0 =整数; I <nsets; I ++)
		のための(整数J = 0; J <nsamples - 1; jは++){ 
			K INTEGER = random_integer()%のI + nsamples * nsamples ; 
			STD ::スワップ(サンプル[I * nsamples + J + 1] .X、サンプル[K] .X)。
		} 
} 

ボイドNRooks :: shuffled_y_coordinates(){ 
	ための式(I = 0の整数であり; I <nsets; I ++)
		(; J <nsamples - 1、整数j = 0、J ++)のために{
			整数k = random_integer()%のnsamples + I * nsamples。
			STD ::スワップ(サンプル[I * nsamples + J + 1] .Y、サンプル[K]・Y)
		} 
}

  

テスト結果は、グラフ:

おすすめ

転載: www.cnblogs.com/dalgleish/p/12602897.html